我的脚本需要在https://graph.facebook.com/xxxx上获取几个json文件,并从每个json中检索某个字段,然后计算求和。
我的问题是如何在所有getJSON完成后打印出结果?使用以下代码,它将打印0.随意建议任何更好的方法。
var result = 0;
$.each(urls, function (i, url) {
$.getJSON(url, function (json) {
result += json.field1;
})
});
alert(result);
答案 0 :(得分:23)
使用jQuery 1.5延迟对象:
累积$.getJSON()
var jxhr = urls.map(function(url) {
return $.getJSON(url, function(json) {
result += json.field1;
})
});
且只有$.when
他们都是.done()
:
$.when.apply($, jxhr).done(function() {
alert(result);
});
注意:这将按照AJAX调用完成的顺序累积result
,而不是按照它们的顺序累积。
答案 1 :(得分:3)
由于您正在直接打印结果,因此无法正常工作,请记住,连接结果的代码是回调,因此会在您发出警报后触发。
在每次回调时,您都必须检查是否所有回复都已完成。用您的处理替换alert()调用。 :)
var result = 0;
var doneCount = 0;
$.each(urls, function (i, url) {
$.getJSON(url, function (json) {
doneCount++;
result += json.field1;
if (doneCount == urls.length) {
alert(result);
}
})
});