从函数中检索变量

时间:2016-02-26 18:59:29

标签: javascript jquery json riot-games-api

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

有更好的方法吗?

2 个答案:

答案 0 :(得分: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请求中,因为你需要等到该请求完成。

答案 1 :(得分:4)

你应该把append语句放在回调函数中,因为 getJSON 是一个异步方法(意味着Request在后台运行,并在得到响应时调用你的函数) ),所以你应该先等待响应然后你可以将它附加到MERGE Definition.tdSection AS Target USING (SELECT * FROM ( VALUES ( 1, 1, 'Administrator', 1, GETDATE(), NULL, Current_User, GETDATE()) ,( 2, 1, 'Admissions', 1, GETDATE(), NULL, Current_User, GETDATE()) ,( 3, 1, 'BOM', 1, GETDATE(), NULL, Current_User, GETDATE()) ,( 4, 1, 'CRC', 1, GETDATE(), NULL, Current_User, GETDATE()) ,( 5, 1, 'ICM', 1, GETDATE(), NULL, Current_User, GETDATE()) ,( 6, 1, 'System', 1, GETDATE(), NULL,Current_User, GETDATE()) ,( 7, 1, 'Therapy', 1, GETDATE(), NULL, Current_User, GETDATE()) ) AS s (SectionId ,BusinessProcessId ,Description, Sequence ,EffectiveStartDate ,EffectiveEndDate ,ModifiedBy ,ModifiedDateTime) ) AS Source ON Target.SectionId = Source.SectionId WHEN NOT MATCHED THEN INSERT (SectionId ,BusinessProcessId ,Description ,Sequence ,EffectiveStartDate ,EffectiveEndDate ,ModifiedBy ,ModifiedDateTime ) VALUES (Source.SectionId ,Source.BusinessProcessId ,Source.Description ,Source.Sequence ,Source.EffectiveStartDate ,Source.EffectiveEndDate ,Source.ModifiedBy ,Source.ModifiedDateTime );

#champ

希望这有帮助。