gpt4 book ai didi

jquery - 等待多个 getJSON 调用完成

转载 作者:行者123 更新时间:2023-12-01 06:14:26 24 4
gpt4 key购买 nike

我有一个循环,可以调用 API 并将结果编译到数组中。如何等到所有调用完成后再恢复执行?我看到了一堆关于如何等待一个调用完成的答案,但我不明白如何检查所有这些答案。如果我创建一个 while 循环,等待“obj”达到正确的长度,则页面只会停止,直到调用完成,这不是我想要的。请帮忙?

function getData(id) {
var thisI = i;
var url = "www.whatever.com?id=" + id;
$.getJSON(url, function(data) {
obj[thisI]=data;
});
}

obj = [];
for (i=0; i < ids.length; i++) {
getData(ids[i]);
}

console.log(obj) //this works! I see all of the elements
document.getElementById("txt").innerHTML=obj[0]['field']; //TypeError: obj[0] is undefined

最佳答案

如果您使用 jQuery 的延迟,这很容易。有一个方法 $.when,它等待多个 Promise 完成然后运行回调。这就是您应该在这里使用的。

不要使用全局 obj 变量,您可以只使用 AJAX 调用的返回值。

function getData(id) {
var thisI = i;
var url = "www.whatever.com?id=" + id;
return $.getJSON(url); // this returns a "promise"
}

因此,我们不填充 obj,而是返回 Promise。然后在循环中收集所有这些。

var AJAX = [];
for (i=0; i < ids.length; i++) {
AJAX.push(getData(ids[i]));
}

然后我们需要在所有这些都完成后连接回调:

$.when.apply($, AJAX).done(function(){
// This callback will be called with multiple arguments,
// one for each AJAX call
// Each argument is an array with the following structure: [data, statusText, jqXHR]

// Let's map the arguments into an object, for ease of use
var obj = [];
for(var i = 0, len = arguments.length; i < len; i++){
obj.push(arguments[i][0]);
}

document.getElementById("txt").innerHTML = obj[0]['field'];
});

关于jquery - 等待多个 getJSON 调用完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19916894/

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