【发布时间】:2012-08-20 08:09:19
【问题描述】:
我正在使用 jquery each 遍历一组 html 元素。在每次迭代中,我都会调用get。我想跟踪成功的获取并在最后输出一个计数。
var numSuccessful = 0;
$('.mySelector').each(function(){
$.get('/myCfc.cfc?method=doSomething&id=' + $(this).attr('id'),
function(data){
numSuccessful++;
});
});
alert(numSuccessful + ' successful');
此代码的问题在于,每个方法都从所有 get 调用开始,然后在完成 get 之前和 numSuccessful 变量更新之前继续发出警报。在测试运行中,我以“0 成功”而不是“4 成功”结束,因为警报执行得太快了。如何让代码等到所有完成后再继续?整个“each”语句是否有成功回调?
【问题讨论】:
-
你可以使用
jQuery.Callbacks或.promise()——你熟悉这种JS吗? -
$('#mySelector').each? ID 必须是唯一的,您的选择器只选择第一个 id 为mySelector的元素。 -
我使用两个函数循环解决了一个类似的问题:一个外部计数器跟踪元素,将“每个”构造块的内容作为一个函数,完成后调用回调函数,以及如果计数器低于 nr 个元素,则回调再次执行第一个函数。
-
@undefined - 抱歉,这是一个错字。应该是$('.mySelector'),我会更新。
-
@m90 - 不,你能详细说明一下吗?