Ответ json является нулевым от JQuery Ajax - PullRequest
0 голосов
/ 03 марта 2011

это опять поздно ночью, и я бьюсь головой о стену.

У меня есть вызов jjery ajax:

    function waitForMsg(){


    $.ajax({
        type: "GET",
        url: "backend.php",
        async: true,
        cache: false,
        dataType: 'json',
        timeout: 50000, /* Timeout in ms */
                    data: "TimeStamp=" + TimeStamp,
        success: function(data){

                        var json = eval('(' + data + ')');

                        $('#TextHistory :last-child').after('<p>' + json.message + '</p>');

          TimeStamp = json['timestamp'];

            setTimeout(
                waitForMsg, /* Request next message */
                5000            /* ..after 5 seconds */
            );
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){

            $('#TextHistory :last-child').after('<p>' + errorThrown + '</p>');

            setTimeout(
                'waitForMsg()', /* Try again after.. */
                "15000");       /* milliseconds (15seconds) */
        },
    });
};

, который уходит в бэкэнд.php, который в настоящее время выглядит следующим образом:

<?php

header('Content-Type: application/json');

$response = array();

$response["message"] = "Blarde Bar Blar";

$response["timestamp"] = $LastMsgUpdated;   // part of bigger script this is taken from.

echo json_encode($response);

?>

... но когда запускается функция успеха ajax, я получаю сообщение в firebug, говорящее «json.msg is null» ... и действительно, когда я смотрю на jsonОбъект в окне просмотра показывает, что он нулевой.Сейчас я пытаюсь это понять, поэтому не уверен, что делаю что-то неправильно или просто пропустил что-то глупое.Я также заметил, что в firebug нет заголовков ответа.Как это может быть, когда они явно находятся наверху backend.php ..... так странно, что у меня болит голова ... нужно спать.

Заранее спасибо за любую помощь.Dan

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

data, который передается обратному вызову, уже является объектом JavaScript, так как для параметра dataType установлено значение json:

"json": оценивает ответ как JSON ивозвращает объект JavaScript.В jQuery 1.4 данные JSON анализируются строго;любой искаженный JSON отклоняется и выдается ошибка разбора.(См. Json.org для получения дополнительной информации о правильном форматировании JSON.)

Итак, эта строка создает мусор:

var json = eval('(' + data + ')');

(я получаю ошибку SyntaxError: Unexpected identifier вChrome)

Удалите его и используйте data.message.


Кроме того, не используйте eval для анализа данных JSON, лучшедоступные методы .

0 голосов
/ 03 марта 2011

Ваш json на самом деле называется данными на этом этапе:

$('#TextHistory :last-child').after('<p>' + json.message +

Это связано с:

function(data){

Так что вы должны получить к нему доступ так:

$('#TextHistory :last-child').after('<p>' + data.message +
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...