为什么$ .each说这个JSON对象是未定义的?

时间:2010-06-22 21:22:15

标签: json jquery

这是我的Javascript:

$.post('foo.php', { request: Request }, function(data)
{
    $.each(data.chats, function(i, chat)
    { ... });
});

以下是由Firebug和其他所有内容验证的JSON,此代码正在接收:

{
    "chats": [
        {
            "chat_id": "22",
            "user_status": "Listening",
            "user_ping": "2010-06-22 15:53:57",
            "messages": [
                {
                    "chat_id": "22",
                    "line_id": "5",
                    "message": "Hello",
                    "timestamp": "15:53"
                }
            ]
        }
    ]
}

...为什么,当我运行它时,它不起作用,并且Firebug抛出“对象未定义”的错误,并在jquery.js的第552行链接到“length = object.length” ,当我执行console.log(data.chats)时显示'undefined'? console.log(数据)显示完整的JSON响应,但由于某种原因它不想处理data.chats ...我已经缩小了'$ .each'行的错误。

我有理由相信这是一个非常简单的错误,当有人向我指出时我会面对,但在这一点上我完全糊涂了。 (是的,“聊天”应该是一个JSON数组,以便将来处理多个聊天,与消息相同。)

2 个答案:

答案 0 :(得分:6)

告诉它您期待JSON - 默认情况下它会将响应视为html。

$.post('foo.php', { request: Request }, function(data) 
{ 
    $.each(data.chats, function(i, chat) 
    { ... }); 
}, 'json');

答案 1 :(得分:2)

chats是一个JSON数组,因为它是一个包含JSON数组的字符串,或者它是一个JavaScript对象?如果它是前者,你需要将它转换成后者才能开始使用它。