aw *_*rud 6 javascript jquery multithreading javascript-events
我知道Javascript没有多个线程,但我想知道以下代码是否有任何破解的机会.我的理解是,除非调用异步函数,例如setTimeout
AJAX调用,否则一旦代码块开始执行,它就无法暂停直到它完成或调用异步函数.
基本上,用户选择多个复选框,然后点击一个按钮,执行其选择的AJAX处理.我的目标是拥有一个"Saving ..."图标,该图标仅在所有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.');
}
}
}
Run Code Online (Sandbox Code Playgroud)
JavaScript 中只有一个线程,因此每个想要执行的函数都被放入堆栈中,并且必须等待所有其他函数都执行完毕。在您的情况下,“each”是堆栈中的第一个函数,因此每个回调函数都必须等待并将按照它们放入堆栈的顺序执行。毕竟“numProcessed == toProcess”只能有一次为真。
归档时间: |
|
查看次数: |
401 次 |
最近记录: |