2010-06-22 115 views
1

这里是我的javascript:

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

这里是由萤火虫验证和其他一切的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时显示'undefined' (data.chats)? console.log(data)显示完整的JSON响应,但出于某种原因,它不想处理data.chats ...我已经缩小了'$ .each'这一行的错误范围。

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

回答

6

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

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

输入facepalm。 – Andrew 2010-06-22 21:30:40

2

chats是一个JSON数组,它是一个包含JSON数组的字符串,或者从某种意义上说,这是一个JavaScript对象?如果它是前者,你需要将它转换为后者,然后才能开始使用它。

+0

我不确定我是否理解。我发布的JSON是从服务器传递给客户端的确切内容和全部内容(为了便于阅读而增加空格)并作为'数据'参数发送到函数。 JSON本身是由带有json_encode()的PHP数组生成的。 – Andrew 2010-06-22 21:29:42

+0

@Andrew - 但它不会被解释为JSON,因为你没有告诉它你期望JSON。它将其视为HTML(即字符串),而不是将其解释为因为您没有提供响应类型。 – tvanfosson 2010-06-22 21:31:16

+0

tvanfosson的回复有一个示例代码,演示了如何让jQuery的'post'函数自动将字符串转换为JavaScript数组。我的回答只是解释你为什么需要。 – Zarel 2010-06-22 21:31:52

相关问题