给出以下jquery ajax请求:
$.getJSON("getSearchSystems.php", {level: "full", data:this.label}, function(data){
//This method does not work.
console.log(data.regionName);
console.log(data.constellationName);
console.log(data.solarSystemName);
//This method does work
$.each(data, function (i, elem) {
console.log(elem.regionName);
console.log(elem.constellationName);
console.log(elem.solarSystemName);
});
});
输出:
undefined
undefined
undefined
The Bleak Lands
Sasen
Kuomi
PHP脚本的JSON响应
[{"regionName":"The Bleak Lands","constellationName":"Sasen","solarSystemName":"Kuomi"}]
我似乎无法弄清楚如何通过迭代来访问这些对象数据。没有循环没有办法做到这一点吗?
我希望能够访问var regionName = data.regionName
答案 0 :(得分:2)
试
console.log(data[0].regionName);
不要问为什么,但有时数据会以数组形式返回,并且可以像data[0]
答案 1 :(得分:1)
如果你想循环你的服务器需要发送一个数组,如下所示:
[ { regionName: 'r1', constellationName: 'c1', solarSystemName: 's1' },
{ regionName: 'r2', constellationName: 'c2', solarSystemName: 's2' } ]
查看您获得的undefined
个值,我怀疑此数组的第一个元素不包含任何regionName
,constellationName
和solarSystemName
属性看起来像这样:
[ { someIrrelevantProperty: 'foo bar', someOtherirrelevantProperty: 'baz' },
{ regionName: 'The Bleak Lands', constellationName: 'Sasen', solarSystemName: 'Kuomi' } ]
答案 2 :(得分:0)
您的请求是否总是像json转储一样返回json对象数组?
如果是这样,当你在没有迭代的情况下调用console.log(data.regionName);
时总是会得到未定义的,因为你的原始数据是一个数组而你试图引用json数组的未定义属性。
但是,如果您要检查特定值,例如错误检查值,结果计数或与您的业务相关的其他一些值;您必须使用包含数据数组的对象以及所需的其他值进行响应。像这样;
{"object1":"value1", "object2":[{"regionName":"The Bleak Lands","constellationName":"Sasen","solarSystemName":"Kuomi"}]}