$ .getJSON返回“未定义”值,数据读取[object Object]

时间:2012-07-26 21:44:23

标签: jquery ajax json javascript-events getjson

提前感谢您的帮助。我是JSON的新手,我一直在尝试使用$ .getJSON来填充一些没有运气的表单字段。

我开始砍掉碎片,直到我只是从服务器测试我的响应(我的服务器在浏览器中查看下面列出的URL时提供JSON):

$(document).ready(function(){
    $('#button').live('click', function(){
        $.getJSON('http://localhost:8000/core/api/master-assembly/16', function(data) { 
        // alert(data); // uncomment for debug
           $('#showdata').html("<p>item1="+data.afAgeCounter+" item2="+data.afWordCounter+" item3="+data.idNumber+"</p>");
        });
    });
});

我的JSON数据类似于:

{"success":true,"data":{"afWordCounter":123,"afAgeCounter":456,"idNumber":789, ...

当我运行此脚本时,我得到输出:

item1 = undefined item2 = undefined item3 = undefined

如果我取消注释

alert(data);

我所得到的只是[object Object]

那么这里给出了什么?

再次感谢:)

5 个答案:

答案 0 :(得分:2)

尝试

$('#showdata').html("<p>item1="+data.data.afAgeCounter+" item2="+data.data.afWordCounter+" item3="+data.data.idNumber+"</p>");

答案 1 :(得分:2)

您应该像这样访问它:

data.data.afWordCounter

因为你的json变量有这样的结构:

data = {
    "success":true,
    "data":{
         "afWordCounter":123,"afAgeCounter":456,"idNumber":789,
         ...

答案 2 :(得分:1)

您返回的数据没有afAgeCounter等属性。它有data属性,包含那些。

您需要先获得data属性。

if(data.success){
    data = data.data;
    $('#showdata').html("<p>item1="+data.afAgeCounter+" item2="+data.afWordCounter+" item3="+data.idNumber+"</p>");
}

答案 3 :(得分:1)

正如其他人所说,你的整个JSON结果是你回调的参数 - 'data',它是一个对象。

它有两个属性,'成功'和'数据'。 'data'本身就是对象{}和它自己的属性afWordCounter,afAgeCounter等等。所以要获得内部'data'对象的属性,你需要使用data.data.afWordCounter等

如果将方法体转换为类似的内容,可能会更清楚:

    $.getJSON('http://localhost:8000/core/api/master-assembly/16', function(jsonresult)         { 

       $('#showdata').html("<p>item1="+jsonresult.data.afAgeCounter+" item2="+jsonresult.data.afWordCounter+" item3="+jsonresult.data.idNumber+"</p>");
    });

答案 4 :(得分:0)

只是在这里堆积,但是如果你想知道js对象中包含什么,你总是可以使用JSON.stringify将它打印成字符串:https://github.com/douglascrockford/JSON-js/blob/master/json2.js

所以,有问题的对象,您可以通过以下方式查看其中包含的内容:

alert(JSON.stringify(mysteryObject));

console.log(JSON.stringify(mysteryObject);