У меня есть вызов ajax внутри цикла .each, завернутого в функцию setInterval. Это обрабатывает обновление многих div на панели инструментов всего несколькими строками кода на странице html.
Я беспокоюсь о задержке сервера по сравнению со скоростью на стороне клиента. Что произойдет, если сервер не ответит данными до того, как цикл перейдет к следующей итерации?
Итак, мой вопрос: можно ли приостановить цикл до тех пор, пока успех не будет выполнен?
Звонок Аякса:
setInterval(function() {
$(".ajax_update").each(function(){
$.ajax({
type: "POST",
dataType: "json",
url: "ajax/automated_update/confirmed_appointments.php",
data: "clinic_id=<? echo $clinic_id ?>&tomorrow=<? echo $tomorrow ?>&"+$(this).data('stored'), // serializes the form's elements.
success: function(data)
{
$(data[0]).html(data[1]);
}
});
});
}, 5000); //5 seconds*
</script>
Я просмотрел .ajaxComplete(), но не вижу, как применить это в качестве решения.
Я также посмотрел на превращение цикла во что-то, что вызывает себя так:
function doLoop() {
if (i >= options.length) {
return;
}
$.ajax({
success: function(data) {
i++;
doLoop();
}
});
}
Но не будет ли это мешать .each? Я не понимаю, как это будет хорошо работать с .each и зацикливанием на основе моего класса div.
Я просто не могу понять это! Любая помощь будет оценена по достоинству.
Мне удалось получить .when при работе с вызовом ajax, но я не понимаю, как заставить .when делать то, что мне нужно (остановить цикл, пока вызов ajax не будет выполнен).
$(".ajax_update").each(function(){
$.ajax({
type: "POST",
dataType: "json",
url: "ajax/automated_update/confirmed_appointments.php",
data: "clinic_id=<? echo $clinic_id ?>&tomorrow=<? echo $tomorrow ?>&"+$(this).data('stored'), // serializes the form's elements.
success: function(data)
{
$(data[0]).html(data[1]);
}
});
$.when( $.ajax() ).done(function() {
alert("Finished it");
});
});