Відповіді:
Як зазначають інші, 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);
}
});
})();
Так, ви можете використовувати або setTimeout()
метод JavaScript, або 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);
});
Я спробував код нижче,
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(executeQuery, 5000);
вулицю executeQuery()
в окрему функцію, як показано нижче,
function executeQuery() {
$.ajax({
url: 'url/path/here',
success: function(data) {
// do something with the return value here if you like
}
});
updateCall();
}
function updateCall(){
setTimeout(function(){executeQuery()}, 5000);
}
$(document).ready(function() {
executeQuery();
});
Це спрацювало точно так, як було задумано.