2010-06-22 6 views
1

Вот мой Javascript:

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

А вот JSON, что проверяется Firebug и все остальное, этот код получает:

{ 
    "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 выдает ошибку «неопределенный объект» со ссылкой на «length = object.length» в строке 552 jquery.js и показывает «undefined», когда я делаю console.log (data.chats)? Консоль.log (данные) показывает полный ответ 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

2

Является ли chats массив JSON в том смысле, что это строка, содержащая массив JSON, или в том смысле, что это объект JavaScript? Если это первый, вам нужно будет преобразовать его в последний, прежде чем вы сможете начать использовать его таким образом.

+0

Я не уверен, что понимаю. Опубликованный JSON - это точный и общий контент, который доставляется с сервера клиенту (с добавленным интервалом для удобочитаемости) и отправляется функции как параметр «данные». Сам JSON был создан из массива PHP с помощью json_encode(). – Andrew

+0

@ Андрю - но это не интерпретируется как JSON, потому что вы не сказали, что ожидаете JSON. Он рассматривает его как HTML (т. Е. Строку) и не использует его, потому что вы не задали тип ответа. – tvanfosson

+0

Ответ tvanfosson имеет пример кода, который показывает, как получить функцию 'post' jQuery для автоматического преобразования строки в массив JavaScript. Мой ответ объясняет, почему вам нужно. – Zarel

Смежные вопросы