首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >来自数组的多个ajax调用,并在完成时处理回调

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

Stack Overflow用户
提问于 2013-01-16 13:51:18
回答 2查看 19.8K关注 0票数 22

我以前在jQuery中稍微用过promises --但是我在将它应用于这个场景时遇到了麻烦。我更喜欢使用$.when()和$.done()方法来实现这一点。

据我所知,我需要构建一个$.Deferred对象来记录请求,并在这些请求完成时触发回调。在我下面的代码中,回调是在ajax请求之前触发的,而不是在之后--也许我只是需要一些睡眠

我知道我的代码是不完整的,我一直在努力通过添加for循环来应用它。

http://jsfiddle.net/whiteb0x/MBZEu/

代码语言:javascript
复制
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()});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-16 13:59:26

$.when的参数应该是$.ajax的返回值,也不需要单独调用--这没有任何意义。你想要这样的东西:

代码语言:javascript
复制
for (i = 0; i < list.length; i++) {
   requests.push($.ajax(...));
}
$.when.apply(undefined, requests).then(...)

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

代码语言:javascript
复制
$.when(requests[0], requests[1], ...)

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

http://jsfiddle.net/MBZEu/4/ --请注意,在所有成功消息之后,将'done‘记录到控制台。

票数 57
EN

Stack Overflow用户

发布于 2016-10-11 02:21:18

我分享一个简单的例子,可以帮助你处理多个请求及其响应:

代码语言:javascript
复制
var arr = [
    $.ajax({url:"test1.php"}),
    $.ajax({url:"test2.php"}),
    $.ajax({url:"test3.php"})
];
$.when.apply( undefined, arr ).then(function() {
    var objects=arguments;
    console.dir(objects);
});
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14352139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档