【问题标题】:Handling callbacks within a loop在循环中处理回调
【发布时间】:2015-08-10 09:37:09
【问题描述】:

我需要在循环中进行n AJAX 调用并将结果存储在一个数组中。当所有请求都完成并且数组中充满了返回的 JSON 数据时,我想遍历它来检查它。

这里有两个问题:

1) 如何使jqxhr$.each 之外可用?

2) jqxhr 如何知道循环何时结束调用complete?我只想在循环内的所有 AJAX 调用完成时调用 complete 承诺。

    $.each(jsonFilesArray, function (i, jsonQuestID) {
        var jqxhr = $.getJSON("dialog/quest_"+jsonQuestID+".json", function(json) {
            vocabJSONArray.push(json);
        }).done(function () {
            log("done");
        }).fail(function () {
            log("error");
        }).always(function() {
            log("complete");
        });
    });

    jqxhr.complete(function () {
        //loop through vocabJSONArray
    });

【问题讨论】:

    标签: ajax json loops jqxhr


    【解决方案1】:

    我想我可以将请求包装在一个闭包中以确保我的循环值始终是我所期望的,然后在我的always 承诺中运行循环。不过正在寻找更好的解决方案。

     $.each(jsonFilesArray, function (i, jsonQuestID) {
            (function (i, id) {
                $.getJSON("dialog/quest_" + id + ".json", function (json) {
                    vocabJSONArray.push(json);
                }).always(function () {
                    log("done");
                    if (i === jsonFilesArray.length-1) {
                        //loop through vocabJSONArray
                    }
                });
            })(i, jsonQuestID);
        });
    

    【讨论】:

      猜你喜欢
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多