解析多维JSON数组使用$.AJAX

Parse multidimensional JSON array using $.get AJAX

本文关键字:AJAX 数组 JSON      更新时间:2023-09-26

我有一个用于查找数组并使用AJAX和jQuery返回结果的表单。我有一个功能可以工作,但另一个不能,我确信在这一点上,我对过度分析和长时间的故障排除感到困惑。请让我知道我错过了什么。

基本表单元素:

<form name="theForm">
<input id="userName" value="myName" />
<input id="sumID" value="9999999" />
<input type="submit" onClick="summonerLookUp();" />
</form>

基本数组:

{"myName": {
   "id": 9999999,
   "name": "myName",
   "profileIconId": 673,
   "revisionDate": 1406601264000,
   "summonerLevel": 26
}}

工作Javascript:

function summonerLookUp() {
    var ID = "";
    ID = $("#userName").val();
    setKey();
    if (ID !== "") {
        $.ajax({
            url: 'http://url-to-api',
            type: 'GET',
            dataType: 'json',
            data: {
            },
            success: function (json) {
                var userID = ID.replace(" ", "");
                userID = userID.toLowerCase().trim();
                summonerLevel = json[userID].summonerLevel;
                summonerID = json[userID].id;
                document.getElementById("sLevel").innerHTML            
                = summonerLevel;
                document.getElementById("sID").innerHTML 
                = summonerID;
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert("error getting Summoner data!");
            }
        });
    } else {
    }
}


返回:
召唤师等级:26
召唤师ID: 9999999

现在,当我尝试访问"pages"中的"Name"属性时,这个用户ID在以下数组中:

{"9999999": {
   "pages": [
      {
         "masteries": [
            {
               "id": 4313,
               "rank": 2
            },
            {
               "id": 4121,
               "rank": 1
            },
            {
               "id": 4134,
               "rank": 3
            }
         ],
         "id": 41932694,
         "name": "Offense Main",
         "current": true
      },
      {
         "masteries": [
            {
               "id": 4123,
               "rank": 3
            },
            {
               "id": 4311,
               "rank": 1
            },
         ],
         "id": 41932698,
         "name": "Utility",
         "current": false
      },
      {
         "masteries": [
            {
               "id": 4143,
               "rank": 3
            },
            {
               "id": 4162,
               "rank": 1
            },
            {
               "id": 4131,
               "rank": 1
            }
         ],
         "id": 41932702,
         "name": "Offense",
         "current": false
      },
   ],
   "summonerId": 9999999
}}
使用下面的

,我没有得到我所期望的(即,进攻主):

function masteriesLookUp() {
    var ID = "";
    ID = $("#sumID").val();
    setKey();
    if (ID !== "") {
        $.ajax({
            url: 'http://url-to-api',
            type: 'GET',
            dataType: 'json',
            data: {
            },
            success: function (json) {
                var userID = ID;
                summonerMastery = json[userID].pages;
                document.getElementById("sMastery").innerHTML 
                = summonerMastery;
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert("error getting Summoner data!");
            }
        });
    } else {
    }
}

返回:

[object Object],[object Object],[object Object],[object Object]

我肯定有几个问题,但我怀疑下面这行是特别的:

summonerMastery = json[userID].pages;

您可以通过以下方式获取页面名称

success: function (json) {
    var userID = ID;
    summonerMastery = json[userID].pages;
    for(var page in summonerMastery){
        document.getElementById("sMastery").innerHTML += summonerMastery[page].name+" ";
    }
}
编辑:

要检查特定的单词,您可以这样做

for(var page in summonerMastery){
    if(summonerMastery[page].name.toLowerCase().indexOf("offense") !== -1){
        // do your stuff here.
    }
}
编辑2:

HTML中添加一个按钮(或者在AJAX调用的success处理程序中动态创建一个按钮)

<input type="button" id="check" data-info="" style="display:none;" value="Check" />

javascript

success: function (json) {
    var userID = ID;
    summonerMastery = json[userID].pages;
    var b = $("#check");
    b.data("info",summonerMastery);
    b.off('click').on('click',function(){
        var summonerMastery = $(this).data('info');
        for(var page in summonerMastery){
            if(summonerMastery[page].name.toLowerCase().indexOf("offense") !== -1){
                alert("Success");
            } else {
                alert("Failure");
            }
        }
    });
    b.css('display','block'); 
}