Отправка асинхронных запросов AJAX один за другим с интервалом в 15 секунд

#ajax #loops #asynchronous

#ajax #циклы #асинхронный

Вопрос:

Я хочу опрашивать данные с веб-сервера (PHP) с интервалом в 15 секунд от 50 до 100 раз (или, скажем, бесконечный цикл, пока для переменной StopFlag не будет установлено значение true.). Для этого опроса данных я собираюсь использовать асинхронное сообщение AJAX для отправки запросовна веб-сервер. Как я могу этого добиться? Я пытался решить эту головоломку самостоятельно, но, к сожалению, мне это не удалось, поскольку в javascript нет ключевого слова для приостановки выполнения скрипта. Есть ли какой-нибудь способ заставить это работать? или какой-либо обходной путь для этого? Пожалуйста, дайте мне знать или поделитесь своим опытом, если вы уже сталкивались с этой проблемой.

Ответ №1:

Вы должны использовать обратный вызов для тайм-аута; он будет рекурсивно вызывать следующую функцию.

Вы также можете использовать jQuery, который поможет вам сделать ваш код более компактным. Результат может выглядеть примерно так:

 var finished = false;
function keepTrying() {
  if (finished) {
    return;
  }
  $.ajax(params);
  setTimeout(function() {
    keepTrying();
  }, 15000);
}
  

И в параметрах у вас будет такая функция успеха:

 function success() {
  finished = true;
}
  

Просто вызовите keepTrying() в первый раз; он будет зацикливаться до тех пор, пока не завершится успешно. Этот код немного уродлив, но, надеюсь, вы поняли идею.

Комментарии:

1. Рад узнать! Пожалуйста, примите ответ, мне нужна репутация для голосования 🙂