jQuery: интервал задержки функции ajax до завершения предыдущего запуска

StackOverflow https://stackoverflow.com/questions/509007

Вопрос

Я настроил обновление страницы AJAX с помощью setInterval . Время от времени сервер работает настолько медленно, что новый запрос инициируется раньше, чем предыдущий.

Как я могу этого предотвратить?

Это было полезно?

Решение

Используйте значение тайм-аута, которое меньше вашего интервала обновления.Когда время ожидания запроса истекает, он вызывает обработчик ошибок, поэтому вам нужно различать ошибки времени ожидания и другие типы ошибок в обработчике.

родовое слово

Документы на jquery.com.Пример выше из того же источника, но с добавленным значением тайм-аута.

Другие советы

Вместо этого используйте setTimeout, инициируйте другой setTimeout только после получения результата запроса AJAX.Таким образом, обновление происходит только по истечении указанного периода с момента последнего обновления.

Вместо использования фиксированного, жестко заданного интервала: запускайте следующее обновление как последний шаг обработки текущего, напримерв обратных вызовах события «Успех» (или «Завершено»).

Вы можете добавить переменную, которая отслеживает время отправки текущего запроса, чтобы вы могли рассчитать динамическую задержку:

  1. принять текущее время T1
  2. отправить асинхронный запрос
  3. бывает и другое ...
  4. асинхронный запрос возвращается, обратный вызов выполняется
  5. вычесть T1 из текущего времени
  6. если результат <желаемый интервал запроса, установите значение задержки> 0
  7. если результат>= желаемый интервал запроса, установите значение задержки= 0
  8. вызвать setTimeout со значением задержки, инициируя следующий цикл

Я могу вам сказать, используйте флаг в своем коде. Нравится (не то, что я на самом деле рекомендую, просто простой пример)

родовое слово

Что-то вроде этого, примитивно, но вы избежите гонок. С уважением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top