2012-02-19 4 views
0

Я хочу сделать следующее заявление:Как использовать таймер в javascript?

1) Я хочу получить сообщение с помощью ajax. (Jquery)

2) Когда я прочитал сообщение - Я хочу подождать 10 секунд, чтобы получить следующее сообщение,

3) Затем подождите еще 10 секунд, чтобы получить следующее сообщение,

4) Все строки в базе данных.

Как использовать таймер в этом случае?

Как я могу начать, а затем остановить таймер?

function loadMessage(user_id) 
    { 
     $.post('ActionScripts/Message.php',{ 
      user_id: user_id 
     }, function(data) { 

    //data 

      },"json"); 
    } 

ответ

4
function loadMessage(user_id) 
    { 
     $.post('ActionScripts/Message.php',{ 
      user_id: user_id 
     }, function(data) { 

      //data 
      setTimeout(function(){loadMessage(user_id); }, 10000); 

      },"json"); 
    } 
+1

Это сломает цепочку функций, если запрос истекает или не удается ... – shaun5

0

Следующая реализация требует от к серверу и выполняет каждые 10 секунд:

function loadmessage (user_id) { 
    $.post('ActionScripts/Message.php', { 
     user_id: user_id 
    }, function (data) { 

     //data 
    }, "json"); 
} 
var interval = setInterval(function() { loadmessage(5345) }, 10000); 

прекратить использование таймера clearInterval:

clearInterval(interval); 

Чтобы перезапустить таймер повторно initialize в interval переменная:

var interval = setInterval(function() { loadmessage(5345) }, 10000); 
1

Я предпочитаю называть следующий запрос Аякса после завершения предыдущего (не так важно, с 10000 интервала), но вы должны вызвать следующий один, даже если первый не удается ...

function loadMessage(user_id) { 
    $.ajax({ 
    type: "POST", 
    url: 'ActionScripts/Message.php', 
    data: { user_id: user_id } 
    dataType: 'json', 
    async: true, 
    cache: false, 
    timeout:30000, 
    success: function(data){ 
     // do what you need with the returned data... 
     setTimeout(function(){loadMessage(user_id); },10000); 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown){ 
     //do what you want with the error 
     setTimeout(function(){loadMessage(user_id); },10000); 
    } 
    }); 
} 
+0

Кроме того, полная обработка данных в try {} catch {} также является хорошей идеей, потому что ошибка также остановит цепочку функций. .. – shaun5

+0

, используя анонимную функцию вместо того, чтобы оставить ее до анализатора, чтобы определить «loadmessage (user_id)». – jcolebrand

+0

Согласен. Я не понимаю, как это началось, но я виноват в этом ... – shaun5

Смежные вопросы