微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jquery – 数组中的多个ajax调用,完成后处理回调

我以前在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/ – 注意在所有成功消息之后,“完成”已记录到控制台.

原文地址:https://www.jb51.cc/jquery/180452.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐