(请不要将其标记为重复或至少指向正确答案,因为我处理多个形成数组的请求)。我将一些url调用设置为返回的“data”值作为数组。我计划使用这个数组来创建所有这些值的总和。
var data_num=[];
$.each(arr_urls, function( index, value ) {
$.getJSON(arr_urls[index], function (data) {
data_num.push(data);
});
});
alert(data_num);
答案 0 :(得分:1)
您可能已经熟悉为什么这不起作用,an oft linked duplicate中有很好的解释。但是,这不是完全重复。因为你没有问这个:
如何从异步操作返回响应?
你问的是这样的事情:
如何循环遍历一堆异步操作并等待它们全部完成?
为此,您首先需要将它们放入数组中。像这样:
var my_promises = [];
var data_num = [];
$.each(arr_urls, function( index, value ) {
my_promises.push($.getJSON(arr_urls[index], function (data) {
data_num.push(data);
}));
});
这应该给你一个名为promises
的数组,它保存对当前正在执行的异步操作的引用。现在你只需要等待它们全部完成。像这样:
$.when.apply($, my_promises).then(function() {
alert(data_num);
});
这应该将.when()
函数应用于整个promises数组,只有在整个数组完成后才执行回调。
答案 1 :(得分:-1)
我会假设你不能做那个服务器端(这是最好的事情)。
好的,第一件事:你为什么要做$.getJSON(arr_urls[index]
?如果您想使用$.each
,则应使用value
,甚至更好:使用进行循环
for (var i = arr_urls.length - 1; i >= 0; i--) {
arr_urls[i]
}
另外,为什么不尝试使用console.log(data)
在JavaScript控制台上查看返回的内容?您的浏览器控制台甚至可以告诉您对网站URL的请求是否有错误。