Почему $ .each говорит, что этот объект JSON не определен? - PullRequest
1 голос
/ 23 июня 2010

Вот мой 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 и показывает «неопределенный», когда я делаю console.log (data.chats)? Console.log (data) показывает полный ответ JSON, но по какой-то причине он не хочет иметь дело с data.chats ... Я сузил ошибку до строки '$ .each'.

Я вполне уверен, что это очень простая ошибка, и я буду сталкиваться с проблемой, когда кто-нибудь мне это скажет, но в этот момент я совершенно сбит с толку. (и да, "чаты" должны быть массивом JSON, чтобы обрабатывать несколько чатов в будущем, то же самое с сообщениями.)

Ответы [ 2 ]

6 голосов
/ 23 июня 2010

Скажите, что вы ожидаете JSON - по умолчанию он будет обрабатывать ответ как html.

$.post('foo.php', { request: Request }, function(data) 
{ 
    $.each(data.chats, function(i, chat) 
    { ... }); 
}, 'json');
2 голосов
/ 23 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...