Добрый день. Столкнулся с такой проблемой при исползовании JSON...
К примеру такой JavaScript-код:
$.ajax( {
dataType: 'json',
error: function(xhr, status) {
alert('Ошибка');
}
/* об этом я потом расскажу=)
complete: function(xhr, status) {
alert('Завершено, статус: ' + status);
}*/
} );
$.post(
'[I]тут_адрес[/I]',
{[I]какие-то_переменные[/I]},
function(data) {
alert(data);
}
/*, 'json' */
)
Так вот, когда dataType стоит 'json' и получаем документ содержащий строку к примеру такого вида:
{ "xxx": "yyy" }
То срабатывает функция указанная в качестве параметра функции $.post(), как будто всё норм, однако data содержит строку а не объект. Далее срабатывает функция указанная в параметре error (заданная в качестве свойста хэш-объекта $.ajax()), при этом status = parseerror.
Хоть ты трестни, заголовки типо:
header('Content-Type: text/json /*или text/javascript*/; charset=windows-1251');
не помогают.
Если расскоментировать последний параметр $.post() (и убрать dataType: 'json' в первой функции), то всё сазу норм... Однако...
В случае ошибки(например специально указать не существующий файл или вместо строки JSON приедет сообщение о синтаксической ошибке от анализатора PHP), то функция указанная в $.post() в качестве параметра не вызывается, однако вызывается функция complete (в примере закомментирована), и выдаёт: "Завершено, статус: success"!!!
Тут ещё один вопрос, как нормально обрабатывать такого рода ошибки?
Кроме как завести внешнюю переменную, значение которой будет менять ф-ция в $.post(), и в случае ошибки, она произошла "примерно здесь"...