jQuery. Обработка ошибок и JSON.
Добрый день. Столкнулся с такой проблемой при исползовании 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(), и в случае ошибки, она произошла "примерно здесь"... |
Первое и самое главное:
для того, чтоб из строки {"test":"test"} получить объект, надо сделать так: var res = eval('(' + data + ')'); Второе: что-то я не понял, нафига использовать две функции $.ajax и $.post? $.ajax прекрасно умеет сам отправлять данные любым методом (хоть post, хоть get, хоть еще что-то) |
Цитата:
function(data){ alert(data.name); // John console.log(data.time); // 2pm }, "json"); Цитата:
|
Цитата:
Это: Цитата:
|
Часовой пояс GMT +3, время: 01:35. |