gpt4 book ai didi

jQuery Deferred - 获取链接 ajax 调用的结果

转载 作者:行者123 更新时间:2023-11-30 23:52:03 24 4
gpt4 key购买 nike

以下问题 - 我必须多次调用 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 调用的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13912775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com