Я понимаю, что Javascript не имеет нескольких потоков, но я хотел бы знать, есть ли шанс на разрыв следующего кода. Насколько я понимаю, до тех пор, пока не будет вызвана асинхронная функция, такая как setTimeout
или вызов AJAX, после начала выполнения блока кода он не сможет приостановиться, пока не завершится или не вызовет асинхронную функцию.
Обычно пользователи выбирают несколько флажков, а затем нажимают кнопку, которая выполняет AJAX-обработку своих выборов. Моя цель - иметь значок «Сохранение ...», который остается только до тех пор, пока все процессы AJAX не будут завершены, и после того, как все будет завершено, отобразится сообщение об успехе.
Запрещая любые ошибки AJAX, до тех пор, пока функция обратного вызова в jQuery.post
выполняется полностью без перерыва, я не вижу, как if(numProcessed == toProcess)
когда-либо выполнялся бы более одного раза или менее одного раза. Но если два обратных вызова AJAX попадают в функцию обратного вызова, оба увеличивают счетчик numProcessed
перед тем, как перейти к следующему if
, то кажется, что код внутри будет выполнен дважды.
var numProcessed = 0;
var checkedBoxes = jQuery("input[type=checkbox]:checked");
var toProcess = checkedBoxes.size();
checkedBoxes.each(function() {
jQuery.post('somepage.php',{...},function(results) {
numProcessed++;
if(numProcessed == toProcess) {
jQuery("#saving-message").remove();
jQuery("#feedback-panel").text('Successfully processed all selections.');
}
}
}