Как периодически запускать запрос AJAX?
<meta http-equiv="Refresh" Content="5">
этот скрипт перезагружает или обновляет страницу каждые 5 секунд. Но я хочу сделать это с помощью вызова jQuery и AJAX. Возможно ли это?
3 ответов
как указывали другие, 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);
}
});
})();
Да, вы можете использовать либо 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);
});
можно использовать setTimeout
или setInterval
.
разница - setTimeout запускает вашу функцию только один раз, а затем вы должны установить ее снова. setInterval продолжает вызывать выражение снова и снова, если вы не скажете ему остановить