【问题标题】:how to read jquery ajax returned object with out a loop如何在没有循环的情况下读取 jquery ajax 返回对象
【发布时间】:2011-11-16 12:59:50
【问题描述】:

给定以下 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这样的数据

【问题讨论】:

  • 向我们展示 ajax 请求返回的 JSON。使用循环有什么问题?
  • 试试console.log(data[0].regionName);
  • @Matt Ball 抱歉回复晚了,不得不跑去吃饭
  • console.log(JSON.stringify(data)) 打印什么?
  • @3nigma 你能把这个放在答案中,这样我就可以给你信用了。这就像一个魅力。谢谢

标签: jquery ajax json object


【解决方案1】:

试试

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

只是不要问为什么,但有时数据会以数组的形式返回,并且要像data[0]那样访问

【讨论】:

    【解决方案2】:

    您的请求是否总是像您的 json 转储一样返回 json 对象数组?

    如果是这样,当您调用 console.log(data.regionName); 而不进行迭代时,您总是会得到 undefined,因为您的原始数据是一个数组并且您尝试引用 json 数组的未定义属性。

    但是,如果您尝试检查特定值,例如错误检查值、结果计数或与您的业务相关的其他值;您必须使用包含您的数据数组以及您需要的其他值的对象进行响应。像这样;

    {"object1":"value1", "object2":[{"regionName":"The Bleak Lands","constellationName":"Sasen","solarSystemName":"Kuomi"}]}
    

    【讨论】:

    • jquery 自动将 JSON 响应放入 JSON 对象中。
    • 是的,它总是返回 json,因为我使用 phps json_encode() 在将数组/对象发送到 javascript 之前对其进行编码
    【解决方案3】:

    如果你想循环你的服务器需要发送一个数组,像这样:

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

    【讨论】:

    • 对于没有发布 JSON 转储,我深表歉意,但循环有效且没有循环的事实并不能完全使您的答案无效。如果 regionNameconstellationNamesolarSystemName 实际上不是第一个值,我将如何从循环中获得响应?
    • @我们,使用 FireBug 或 Chrome 开发者工具来检查从服务器返回的 JSON。
    • 我必须使用 data[0].regionName 才能工作。我只是在等待将其作为建议将其放入答案中的海报,以便将其标记为正确
    猜你喜欢
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多