【问题标题】:Retrieving a variable from within a function从函数中检索变量
【发布时间】:2016-02-26 18:59:28
【问题描述】:

我正在尝试从英雄联盟 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 函数中。

有没有更好的方法来做到这一点?

【问题讨论】:

  • 只是将 li 附加到嵌套的 chanpionInfo 调用中?此外,它的 json2.name 而不是 json.name

标签: javascript jquery json riot-games-api


【解决方案1】:
$.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 请求中,因为无论如何您都需要等到该请求完成。

【讨论】:

    【解决方案2】:

    您应该将 append 语句放在回调中,因为 getJSON 是一个异步方法(确实意味着请求在后台运行,并在收到响应时回调您的函数),所以你应该先等待回复,然后你可以将它附加到#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>")
            });
    
        }
    });
    

    希望这会有所帮助。

    【讨论】:

    • 小问题,移动 append 语句后,现在我的第一个调用循环,所以我的最终结果看起来像这样。 i.imgur.com/Cp5SpX0.png 它正在循环列表中的最后一项(例如 ID 58)。我做错了什么?
    • 我不确定您期望的结果是什么,但这实际上取决于 Json 响应。 (只是一个小提示:如果你使用json.length,而不是20 更好)。
    • 我正在尝试获取此数据pastebin.com/H1hbCJXJ 但它不包含冠军名称,仅包含他们的 ID。因此,我需要解析每个冠军 ID 的个人数据以获取他们的名字。看起来像这样。 pastebin.com/CWZ1R0Pg 我现在遇到的问题是我的第一个解析将冻结在数据集中的最后一个结果上,而不是在 for 循环中循环并提取每个结果。它看起来像这样。 i.imgur.com/Cp5SpX0.png 而不是这个i.imgur.com/y91HRJ3.png
    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多