3

我想知道是否可以在完成 ajax 调用数组中的所有请求后返回 $.when.apply($, Requests[]) 调用的结果?

我用过:

$.when($.ajax(...)).done(function(data){ console.log(data.d); }

这让我可以处理 ajax 调用的结果。如何将相同的概念应用于 $.when.apply($, Requests[])?我已经尝试过$.when.apply($, Requests[]).then(function(data?){ console.log(data.d); },但这不起作用。有任何想法吗?

基本上,我正在尝试运行可变数量的类似 ajax 调用,并在它们全部完成后处理它们的结果。我将不胜感激任何正确方向的提示!

编辑:澄清我将 Requests[] 设置为包含 ajax 请求的数组。例子:

var Requests = [];
for (var i = 0; i <= 10; i++){ Requests.push($.ajax({...ajax setup...}));
$.when.apply($, Requests).then(function(...){ do Stuff with the result of all });
4

1 回答 1

5

then 回调根据传递给它的 Promise 数量接收可变数量的参数。

在这种情况下,由于传递了 ajax 承诺,因此每个参数都是一个包含 3 项数据、状态和 jqxhr 对象的数组。

所以你需要使用下面的语法来获取第一个请求的结果。

then(function(result1){
    console.log(result[0].d)
})

打印所有请求的结果

then(function (result1) {
    $.each(arguments, function (idx, args) {
        console.log(args[0]);// in your case args[0].d
    })
})

演示:小提琴

于 2013-10-01T02:30:25.553 回答