Как периодически запускать AJAX-запрос? - PullRequest
102 голосов
/ 19 февраля 2011
<meta http-equiv="Refresh" Content="5">

Этот скрипт перезагружает или обновляет страницу через каждые 5 секунд.Но я хочу сделать это, используя вызовы jQuery и AJAX.Является ли это возможным?

Ответы [ 3 ]

265 голосов
/ 19 февраля 2011

Как уже отмечали другие, setInterval и setTimeout сделают свое дело.Я хотел бы выделить немного более продвинутую технику, которую я выучил из этого отличного видео Пола Ирриша: http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/

Для периодических задач, которые могут закончиться с более длительным интервалом, чем интервал повторения (например, HTTP-запрос на медленномсоединение) лучше не использовать setInterval().Если первый запрос не выполнен, и вы запускаете другой, вы можете оказаться в ситуации, когда у вас есть несколько запросов, которые используют общие ресурсы и лишают друг друга ресурсов.Вы можете избежать этой проблемы, ожидая планирования следующего запроса, пока не будет выполнен последний:

// Use a named immediately-invoked function expression.
(function worker() {
  $.get('ajax/test.html', function(data) {
    // Now that we've completed the request schedule the next one.
    $('.result').html(data);
    setTimeout(worker, 5000);
  });
})();

Для простоты я использовал обратный вызов успеха для планирования.Обратной стороной этого является то, что один неудачный запрос остановит обновления.Чтобы избежать этого, вместо этого вы можете использовать полный обратный вызов:

(function worker() {
  $.ajax({
    url: 'ajax/test.html', 
    success: function(data) {
      $('.result').html(data);
    },
    complete: function() {
      // Schedule the next request when the current one's complete
      setTimeout(worker, 5000);
    }
  });
})();
32 голосов
/ 19 февраля 2011

Да, вы можете использовать либо метод JavaScript setTimeout(), либо метод setInterval() для вызова кода, который вы хотите запустить.Вот как вы можете сделать это с помощью setTimeout:

function executeQuery() {
  $.ajax({
    url: 'url/path/here',
    success: function(data) {
      // do something with the return value here if you like
    }
  });
  setTimeout(executeQuery, 5000); // you could choose not to continue on failure...
}

$(document).ready(function() {
  // run the first time; all subsequent calls will take care of themselves
  setTimeout(executeQuery, 5000);
});
4 голосов
/ 19 февраля 2011

Вы можете использовать setTimeout или setInterval.

Разница - setTimeout запускает вашу функцию только один раз, а затем вы должны установить ее снова. setInterval продолжает вызывать выражение снова и снова, если вы не скажете ему остановить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...