jQuery Несколько запросов getJSON - PullRequest
6 голосов
/ 28 апреля 2011

Мой сценарий должен извлечь несколько файлов json на https://graph.facebook.com/xxxx, и извлечь определенное поле из каждого json, а затем вычислить суммирование.

Моя проблема в том, как распечатать результат после того, как все выполнено getJSON? С кодом ниже он будет печатать 0. Не стесняйтесь предлагать любые лучшие подходы.

var result = 0;
$.each(urls, function (i, url) {
    $.getJSON(url, function (json) {
        result += json.field1;
    })
});
alert(result);

Ответы [ 2 ]

23 голосов
/ 28 апреля 2011

Использование отложенных объектов jQuery 1.5:

Накопление массива объектов JQXHR, возвращаемых $.getJSON()

var jxhr = urls.map(function(url) {
    return $.getJSON(url, function(json) {
        result += json.field1;
    })
});

и только $.when они все .done():

$.when.apply($, jxhr).done(function() {
    alert(result);
});

Примечание: это накапливает result в том порядке, в котором AJAX-вызовы завершаются, а не в том порядке, в котором они сделаны.

3 голосов
/ 28 апреля 2011

Это не работает, так как вы распечатываете результат сразу, помните, что код, в котором вы объединяете результат, является обратным вызовом, поэтому сработает после вашего предупреждения.

При каждом обратном вызове вам нужно будет проверить, все ли завершено.замените вызов 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);
            }
        })
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...