Как я могу использовать цикл for с тайм-аутом для запроса ajax каждые 5 секунд

function req() {
  $.ajax({ .......
  })
}

for (var i = 4000; i <= 6000; i++) {

  setTimeout(function() {
    req(i)
  }, i * 5000);

}
-1
Yusuf HR 18 Сен 2021 в 12:00

3 ответа

Лучший ответ

Вы можете отправлять запрос после каждого 5s, используя

time + time * (i - start)
function req(s) {
  console.log("After " + s + "s");
  // $.ajax({.......})
}

const start = 4000,
  end = 6000,
  time = 5000;

for (let i = start; i <= end; i++) {
  setTimeout(function () {
    req((time + time * (i - start)) / 1000); // I've passed the time to track the passed seconds
  }, time + time * (i - start));
}
1
HR01M8055 18 Сен 2021 в 09:14

Не зацикливайте Ajax. Если сервер перегружен, вы будете складывать запросы, которые отменяют друг друга.

Вместо этого сделай

function req() {
  $.ajax({ .......
    success: function() {
      setTimeout(req,5000)
    }
  })
}
2
mplungjan 18 Сен 2021 в 09:20

Вы можете воспринимать это как создание серии запросов с задержкой через цикл for.

function req() {
   console.log('requested');
}

for (let i = 1; i <= 10; i++) {
   setTimeout(req, i * 5000)   
}

Однако такую ​​серию запросов можно легко выполнить и с помощью setInterval.

function req(){
   console.log('requested');
}

const limit = 10;
let counter = 1;

let handler = setInterval(function(){
   
   req();
   
   counter++;
   
   if (counter >= limit)
      clearInterval(handler);
   
}, 5000)
0
Charlie 18 Сен 2021 в 09:17