2012-07-24 66 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