Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.07.2010, 14:27
Новичок на форуме
Отправить личное сообщение для mma_mma Посмотреть профиль Найти все сообщения от mma_mma
 
Регистрация: 18.07.2010
Сообщений: 1

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(), и в случае ошибки, она произошла "примерно здесь"...
Ответить с цитированием
  #2 (permalink)  
Старый 19.07.2010, 10:24
Интересующийся
Отправить личное сообщение для Photon Посмотреть профиль Найти все сообщения от Photon
 
Регистрация: 05.05.2009
Сообщений: 19

Первое и самое главное:
для того, чтоб из строки
{"test":"test"}

получить объект, надо сделать так:
var res = eval('(' + data + ')');

Второе: что-то я не понял, нафига использовать две функции $.ajax и $.post?
$.ajax прекрасно умеет сам отправлять данные любым методом (хоть post, хоть get, хоть еще что-то)
Ответить с цитированием
  #3 (permalink)  
Старый 19.07.2010, 12:06
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от mma_mma Посмотреть сообщение
$.post(
'тут_адрес',
{какие-то_переменные},
function(data) {
alert(data);
}
/*, 'json' */
)[/JS]
$.post("test.php", { "func": "getNameAndTime" },
function(data){
alert(data.name); // John
console.log(data.time); // 2pm
}, "json");

Сообщение от mma_mma Посмотреть сообщение
заголовки типо:
header('Content-Type: text/json /*или text/javascript*/; charset=[B]windows-1251[/B]');

не помогают.
"Content-type: application/json"
Ответить с цитированием
  #4 (permalink)  
Старый 19.07.2010, 12:10
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от mma_mma Посмотреть сообщение
Так вот, когда dataType стоит 'json' и получаем документ содержащий строку к примеру такого вида:
{ "xxx": "yyy" }
получаем не документ содержащий строку, а объект - json(javascript object notation)
Это:
Сообщение от mma_mma Посмотреть сообщение
{ "xxx": "yyy" }
объект
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не работает JSON в JQuery 1.4.1 mcpro jQuery 7 22.03.2010 17:56
jQuery jTreeMenu plugin Seafnox jQuery 9 12.01.2010 21:55
JQuery + FireFox NOOB jQuery 4 02.11.2009 18:16
Jquery, Dynatree и JSON antirek jQuery 6 01.09.2009 15:00
Jquery и json ellesse jQuery 0 04.03.2009 23:26