2012-07-24 52 views
2

下面是一个AJAX调用返回的JSON:我想处理它在jQuery的解析JSON的问题:object.property未定义

{ 
    "StumbleUpon": 0, 
    "Reddit": 0, 
    "Facebook": { 
     "commentsbox_count": 0, 
     "click_count": 0, 
     "total_count": 0, 
     "comment_count": 0, 
     "like_count": 0, 
     "share_count": 0 
    }, 
    "Delicious": 0, 
    "GooglePlusOne": 1, 
    "Buzz": 0, 
    "Twitter": 1, 
    "Diggs": 0, 
    "Pinterest": 0, 
    "LinkedIn": 1 
} 

但出于某种原因,我不明白,脸谱。 total_count是未定义的。我希望否则,因为控制台告诉我上面的json被收到了。此外,所有其他(数据.Twitter等)工作。这里是我产生错误的回调函数。我究竟做错了什么?

function(data){ 

       console.log(data); 
//this line throws the error 
       var fb = data.Facebook; 
       var total = parseInt(data.Twitter + parseInt(fb.total_count) + data.GooglePlusOne + data.Pinterest + data.LinkedIn); 
// rest of code. 
} 

参见jsFiddle的代码。

+0

创建* pared down *复制测试用例。你的实时链接太多了,以至于无法期待人们通过。例如,您引用的代码不在该页面的任何“脚本”块中,因此应该查看15个包含“.js”文件中的哪一个? – 2012-07-24 12:54:29

+0

但fb.total_count的工作? – 2012-07-24 12:56:23

+0

@ T.J.Crowder完成了,对不起。 – pixeline 2012-07-24 13:07:44

回答

4

基本上,that code works - 只要data已被反序列化。如果还没有,要么...

...添加dataType: "JSON"ajax电话:

$.ajax({ 
    // ... 
    dataType: "JSON", 
    // ... 
}); 

...或结果使用$.parseJSON

function(data) { 
    if (typeof data === "string") { 
     data = $.parseJSON(data); 
    } 
    // ... 
} 

注意:您不需要这些数字用parseInt,他们已经在JSON数量和将被正确反序列化。

+0

谢谢,这确实是问题! – pixeline 2012-07-24 13:09:51

+0

@pixeline:啊,很好!很高兴这有帮助。 – 2012-07-24 13:10:47

0

据我可以看到你接收JSON作为一个字符串,但也不解析为一个实际的对象。 Theres太多在页面上真正筛选并精确地告诉你,但这似乎是问题。尝试jQuery.parseJSON