2

我正在尝试从英雄联盟 API 中提取信息。

为了简化我正在做的事情,我试图提取有关用户及其先前匹配项的信息。我遇到的问题是,当我解析 JSON 请求时,它返回一个冠军 ID 而不是他们的名字(例如:412 而不是“Thresh”)。

我能看到的唯一解决方案是发出另一个 JSON 请求并解析该数据以获得冠军名称。目前我所拥有的看起来像这样。

$.getJSON(championMasteryPHP, function (json) {
    for (var i = 0; i < 20; i++) {
        var champID = json[i].championId;
        var championInfo = "http://example.com/champInfo.php?summonerid=" + champID;

    $.getJSON(championInfo, function (json2) {
        var champName = json2.name;
    });

    $('#champ').append("<li>"+champID+" - "+champName+"</li>")
    }
});

我无法访问该champName变量,因为它嵌套在第二个 JSON 函数中。

有一个更好的方法吗?

4

2 回答 2

4
$.getJSON(championMasteryPHP, function (json) {
    for (var i = 0; i < 20; i++) {
        var champID = json[i].championId;
        var championInfo = "http://example.com/champInfo.php?summonerid=" + champID;

    $.getJSON(championInfo, function (json2) {
        var champName = json2.name;
        $('#champ').append("<li>"+champID+" - "+champName+"</li>")
    });
    }
});

只需将其放在第二个 json 请求中,因为无论如何您都需要等到该请求完成。

于 2016-02-26T19:01:57.637 回答
4

您应该将 append 语句放在回调中,因为getJSON是一个异步方法(确实意味着 Request 在后台运行,并在收到响应时回调您的函数),所以您应该先等待响应然后您可以追加它到#champ

$.getJSON(championMasteryPHP, function (json) {
    for (var i = 0; i < 20; i++) {
        var champID = json[i].championId;
        var championInfo = "http://example.com/champInfo.php?summonerid=" + champID;

        $.getJSON(championInfo, function (json2) {
             var champName = json.name;

             $('#champ').append("<li>"+champID+" - "+champName+"</li>")
        });

    }
});

希望这可以帮助。

于 2016-02-26T19:02:04.313 回答