jQuery多个getJSON请求

时间:2011-04-28 11:23:38

标签: javascript jquery json

我的脚本需要在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);

2 个答案:

答案 0 :(得分:23)

使用jQuery 1.5延迟对象:

累积$.getJSON()

返回的JQXHR对象数组
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);
            }
        })
    });