【发布时间】:2014-09-21 13:47:29
【问题描述】:
我有一个表单,用于查找数组并使用 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
现在,当我尝试访问以下数组中此用户 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;
【问题讨论】:
-
首先,这不是有效的 JSON(例如,第二个“masteries”对象末尾的额外逗号)。要获得名称,它看起来像 pages 是 JSON 对象的数组?因此,要获得第一个名称“Offense Main”,则应为
json[userID].pages[0].name,而要获得“Utility”,则应为json[userID].pages[1].name,依此类推。 -
对不起逗号,它是一个很长的数组,我把它修整了一点,我忘记了逗号。我想我明白你对如何访问这些项目的意思。我会试一试,让你知道它是怎么回事。我想我需要某种 foreach 循环来返回所有页面名称,因为我不会总是知道我要访问多少或哪个“页面”名称,对吗?
-
是的,没错。 Pages 只是一个 JSON 对象数组,因此您可以对其进行迭代并从每个
page对象中获取name(或任何其他)属性。
标签: javascript jquery arrays ajax