У меня болит голова, пытаясь понять это. Чтобы запросить некоторые 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);
Вроде долго, извините, но если кто-то знает, что не так, их помощь очень ценится. Спасибо за ваше время.