JSON.parse завершается ошибкой в ​​jQuery, когда PHP-заголовок ответа содержит «application / json» - PullRequest
2 голосов
/ 02 марта 2010

У меня болит голова, пытаясь понять это. Чтобы запросить некоторые json-данные из PHP-скрипта через Ajax, я использую функцию jQuery:

$.ajax({
    type: 'GET',
    cache: 'false',
    url: ajaxUrl,
    data: dataString,
    success: updatePage
});

Если я не установить тип содержимого в заголовке PHP на:

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

Тогда мой ответ с сервера выглядит так:

{"content":"new content"}

И тип содержимого автоматически устанавливается на text / html. Когда dataType в параметрах jQuery ajax не установлен, по умолчанию используется «интеллектуальное угадывание». Я сильно , предполагая, что jQuery распознает данные ответа как json, потому что updatePage анализирует объект. updatePage использует библиотеку JSON js (json2.js) и делает это:

function updatePage(data) {
  $dataObj = JSON.parse(data); 
}

Когда функция вызывается при ajax succes, все работает нормально. Нет ошибок Вот странная вещь: если я установлю свой заголовок на application / json, как указано выше, JSON.parse внезапно сообщит об ошибке. Точно такая же ошибка происходит, если я устанавливаю свой dataType в 'json' в запросе jQuery ajax. Ответ, который я получаю от PHP-скрипта при изменении этих вещей, выглядит точно так же, как и выше. В Firebug ошибка выглядит так:

JSON.parse
  $dataObj = JSON.parse(data); 

Вроде долго, извините, но если кто-то знает, что не так, их помощь очень ценится. Спасибо за ваше время.

1 Ответ

6 голосов
/ 02 марта 2010

Это потому, что вы пытаетесь дважды проанализировать возвращаемое значение.

И явный тип данных json, и использование типа application/json MIME заставляют jQuery анализировать возвращенную строку в объект JavaScript для вас.

Итак, использование JSON.parse() в этих случаях является излишним.

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