2

这是 ajax 调用返回的 json:

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

我正在尝试在 jquery 中处理它,但由于某种我无法理解的原因,Facebook.total_count 未定义。我会期待否则,因为控制台告诉我收到了上面的 json。此外,所有其他(data.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上的代码。

4

2 回答 2

5

从根本上说,该代码有效——前提是data已经反序列化。如果还没有,那也...

...添加dataType: "JSON"ajax通话中:

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

...或用于$.parseJSON结果。

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

注意:您不需要parseInt在这些数字上使用,它们已经是 JSON 中的数字,并且将被正确反序列化。

于 2012-07-24T13:07:14.617 回答
0

据我所知,您将 JSON 作为字符串接收,但也没有将其解析为实际对象。页面上有太多内容无法真正筛选并准确地告诉您,但这似乎是问题所在。试试jQuery.parseJSON

于 2012-07-24T12:58:47.520 回答