我以前在jQuery中使用过承诺,但是我无法将其应用于这种情况.我更喜欢使用$.when()和$.done()方法来实现这一点.
根据我的理解,我需要构建一个记录请求的$.Deferred对象,当这些请求完成时 – 触发回调.在我下面的代码中,回调是在ajax请求之前触发,而不是之后 – 也许我只需要一些睡眠
我知道我的代码是不完整的,我一直在努力应用它添加for循环.
http://jsfiddle.net/whiteb0x/MBZEu/
var list = ['obj1','obj2','obj3','obj4','obj5']; var callback = function() { alert("done"); }; var requests = []; var ajaxFunction = function(obj,successCallback,errorCallback) { for(i = 0; i < list.length; i++) { $.ajax({ url: 'url',success: function() { requests.push(this); } }); } }; $.when($.ajax(),ajaxFunction).then(function(results){callback()});
解决方法
$.when的参数应该是$.ajax的返回值,它也不需要单独调用 – 这是没有意义的.你想要这样的东西:
for (i = 0; i < list.length; i++) { requests.push($.ajax(...)); } $.when.apply(undefined,requests).then(...)
需要的原因是因为$.可以接受多个参数,而不是一个参数数组.应用扩展到:
$.when(requests[0],requests[1],...)
这也假设可以按任何顺序完成请求.
http://jsfiddle.net/MBZEu/4/ – 注意在所有成功消息之后,“完成”已记录到控制台.