Подтвердить что ты не робот

JQuery Ajax - как получить данные ответа по ошибке

У меня есть простое веб-приложение. Я создал сервер REST API, чтобы он возвращал ответ с HTTP-кодом и объектом JSON (или XML) с более подробной информацией: код приложения (специфичный для сценария, сообщение, описывающее, что произошло и т.д.).

Итак, например, если клиент отправляет запрос Register и пароль слишком короткий, HTTP-код ответа будет 400 (Bad Request), а данные ответа будут: {appCode : 1020 , message : "Password is too short"}.

В jQuery я использую функцию "ajax" для создания запроса POST. Когда сервер возвращает что-то отличное от HTTP-кода 200 (OK), jQuery определяет его как "ошибку".

Обработчик ошибок может получить 3 параметра: jqXHR, textStatus, errorThrown. Хо, могу ли я получить объект JSON, отправленный сервером в случае ошибки?

Edit:

1) Вот мой код JS:

function register (userName, password) {
    var postData = {};
    postData["userName"] = userName;
    postData["password"] = password;

    $.ajax ({
        dataType: "json",
        type: "POST",
        url: "<server>/rest/register",
        data: postData,
        success: function(data) {
            showResultSucceed(data);
            hideWaitingDone();
        },
        error: function (jqXHR, textStatus, errorThrown) {

            showResultFailed(jqXHR.responseText);
            hideWaitingFail();
        }
    })
}

2) При взгляде на консоль Firebug кажется, что ответ пуст. При вызове одного и того же запроса с помощью инструмента тестирования REST я получаю ответ с объектом JSON it it.

Что я делаю неправильно?

4b9b3361

Ответ 1

Проведя так много времени на эту проблему, я нашел проблему.

Страница находится по адресу: www.mydomain.com/register
REST api находится по адресу URL: server.mydomain.com/rest

Кажется, что такой POST не так прост.
Я собираюсь найти дополнительную информацию, чтобы лучше понять эту проблему (если у вас есть дополнительная информация, поделитесь ею со мной).

При установке REST API по адресу www.mydomain.com/rest - все работает нормально.

Ответ 2

Вот пример того, как вы получаете данные JSON об ошибке:

$.ajax({
    url: '/path/to/script.php',
    data: {'my':'data'},
    type: 'POST'
}).fail(function($xhr) {
    var data = $xhr.responseJSON;
    console.log(data);
});

Из документов:

Если json указан, ответ анализируется с использованием jQuery.parseJSON перед передачей в качестве объекта обработчику успеха. Анализируемый объект JSON доступен через свойство responseJSON объекта jqXHR.

В противном случае, если responseJSON недоступен, вы можете попробовать $.parseJSON($xhr.responseText).

Ответ 3

непосредственно из документов

Объект jQuery XMLHttpRequest (jqXHR), возвращаемый $.ajax() из jQuery 1.5 - это надмножество родного XMLHttpRequest браузера объект. Например, он содержит responseText и responseXML свойства, а также getResponseHeader()

поэтому используйте аргумент jqXRH и получите свойство responseText.

В приведенной выше ссылке найдите раздел под названием

Объект jqXHR