如何在没有循环的情况下读取jquery ajax返回的对象

时间:2011-09-13 21:16:50

标签: jquery ajax json object

给出以下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

等数据

3 个答案:

答案 0 :(得分:2)

 console.log(data[0].regionName);

不要问为什么,但有时数据会以数组形式返回,并且可以像data[0]

那样访问

答案 1 :(得分:1)

如果你想循环你的服务器需要发送一个数组,如下所示:

[ { regionName: 'r1', constellationName: 'c1', solarSystemName: 's1' }, 
  { regionName: 'r2', constellationName: 'c2', solarSystemName: 's2' } ]

查看您获得的undefined个值,我怀疑此数组的第一个元素不包含任何regionNameconstellationNamesolarSystemName属性看起来像这样:

[ { 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"}]}