Обратите внимание, что setInterval () часто не является лучшим решением для периодического выполнения - оно действительно зависит от того, какой javascript вы на самом деле периодически вызываете.
например. Если вы используете setInterval () с периодом 1000 мс и в периодической функции вы делаете ajax-вызов, для возврата которого иногда требуется 2 секунды, вы будете делать еще один ajax-вызов до того, как первый ответ вернется. Это обычно нежелательно.
У многих библиотек есть периодические методы, которые защищают от ловушек наивного использования setInterval, например, пример Prototype, приведенный Нельсоном.
Чтобы добиться более надежного периодического выполнения с функцией, в которой есть вызов jQuery ajax, рассмотрим что-то вроде этого:
function myPeriodicMethod() {
$.ajax({
url: ...,
success: function(data) {
...
},
complete: function() {
// schedule the next request *only* when the current one is complete:
setTimeout(myPeriodicMethod, 1000);
}
});
}
// schedule the first invocation:
setTimeout(myPeriodicMethod, 1000);
Другой подход состоит в том, чтобы использовать setTimeout, но отслеживать истекшее время в переменной, а затем динамически устанавливать задержку времени ожидания для каждого вызова для выполнения функции как можно ближе к желаемому интервалу, но никогда не быстрее, чем вы можете получить ответы обратно.