$ .parseJSON на $ .ajax - проблема с анализом ответа - PullRequest
6 голосов
/ 27 февраля 2011

Я не знаю, почему, но есть проблема, с которой я сталкиваюсь с $.parseJSON при выполнении вызова ajax, мне нужно проверить, содержит ли ответ JSON, затем продолжить его анализ с $.parseJSON, если он не содержит JSON, тогда он напечатает ответ в элементе (который будет содержать некоторый HTML).

Затем я проверил, будет ли eval делать что-нибудь, что, конечно, и так, но я не хочу использовать eval для этого.

Код, который я получил:

$.ajax({ 
    url: 'ajax.php',
    success: function(response)
    {
        var msg = $.parseJSON(response);

            //alert(typeof(response)); <-- returns 'string'

            //alert(typeof(msg)); <-- returns 'object'

            //alert(msg.error); <-- this doesn't work at all.

            //eval(response) <-- returns [object Object]

        if(msg.error !== '')
        {
            ajaxWindow.html(msg.error);
        }
        else
        {
            ajaxWindow.html(response).hide().slideDown('slow');
        }
    }
});

Так почему же он не может анализировать строку JSON? jQuery.parseJSON ясно говорит:

Принимает правильно сформированную строку JSON и возвращает полученный объект JavaScript.

Но ничего не может быть проанализировано, это какая-то ошибка или, возможно, ошибка?

РЕДАКТИРОВАТЬ: JSON:

[{"error":"Error loading template"}]

Ответы [ 2 ]

7 голосов
/ 27 февраля 2011

У вас есть массив, поэтому вам нужно получить к нему доступ по первому индексу.

Вместо:

alert( msg.error );

сделать:

alert( msg[0].error );
1 голос
/ 27 февраля 2011

Используйте $ .post, если это возможно. Он автоматически устанавливает тип контента в HTML.

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