我之前在jQuery中使用了promise-但是在将其应用于这种情况时遇到了麻烦。我更喜欢使用$ .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()});
to的参数$.when应该是的返回值$.ajax,也不必分别调用-这没有任何意义。您想要这样的东西:
$.when
$.ajax
for (i = 0; i < list.length; i++) { requests.push($.ajax(...)); } $.when.apply(undefined, requests).then(...)
之所以.apply需要这样做,是因为$.when可以接受多个参数,但不能接受参数数组。 .apply本质上扩展为:
.apply
$.when(requests[0], requests[1], ...)
这还假定可以按任何顺序完成请求。
http://jsfiddle.net/MBZEu/4/-注意,在所有成功消息之后,“完成”已记录到控制台。