jQuery Deferred-获取链式Ajax调用的结果

接下来的问题-我必须多次调用ajax函数,当所有函数完成时,将所有结果放入数组。我想出了这个:

function doAjax(xx){

var xdata = {json: $.toJSON({name: xx}),

delay: 1};

return $.ajax({

url:"/echo/json/",

data:xdata,

type:"POST"

});

}

var carr = [doAjax('a'),doAjax('b'),doAjax('c'),doAjax('d')]

var result = [];

$.when( carr )

.done(function(data){

console.log(data);

$.each(data, function(ix,val){

console.log(val.name);

});

});

在这里提琴:http :

//jsfiddle.net/Fkd9n/

一切似乎都工作正常,“ console.log(data)”用响应文本写出对象,但是“

console.log(val.name)”始终为“未定义”。那么一旦所有调用完成,如何将所有结果合并到一个数组中呢?

谢谢!

回答:

如果您知道有多少个Ajax调用,只需使用$ .when()

$.when(doAjax('a'),doAjax('b'),doAjax('c'),doAjax('d'))

.then(function(result_a,result_b,result_c,result_d) {

console.log("Result from query a: " + result_a);

console.log("Result from query b: " + result_b);

console.log("Result from query c: " + result_c);

console.log("Result from query d: " + result_d);

});

如果您不知道将有多少个ajax调用,则可以自己管理延迟的对象。

// altered version of doAjax()

function doAjax(number,dObject) {

var xdata = {json: $.toJSON({name: number}), delay: 1};

$.ajax({

url:"/echo/json/",

data:xdata,

type:"POST",

success: function(data) {

results.push(data);

dObject.resolve();

}

});

}

// array that will contain all deferred objects

var deferreds = [];

// array that will contain all results

var results = [];

// make the ajax calls

for (var i = 0; i < someNumber; i++) {

var dObject = new $.Deferred();

deferreds.push(dObject);

doAjax(i,dObject);

}

// check if all ajax calls have finished

$.when.apply($, deferreds).done(function() {

console.log(results);

});

魔术带有函数apply(),该函数为函数的参数组成一个数组。

以上是 jQuery Deferred-获取链式Ajax调用的结果 的全部内容, 来源链接: utcz.com/qa/407274.html

回到顶部