小编典典

来自数组的多个ajax调用并在完成时处理回调

ajax

我之前在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()});

阅读 216

收藏
2020-07-26

共1个答案

小编典典

to的参数$.when应该是的返回值$.ajax,也不必分别调用-这没有任何意义。您想要这样的东西:

for (i = 0; i < list.length; i++) {
   requests.push($.ajax(...));
}
$.when.apply(undefined, requests).then(...)

之所以.apply需要这样做,是因为$.when可以接受多个参数,但不能接受参数数组。 .apply本质上扩展为:

$.when(requests[0], requests[1], ...)

这还假定可以按任何顺序完成请求。

http://jsfiddle.net/MBZEu/4/-注意,在所有成功消息之后,“完成”已记录到控制台。

2020-07-26