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.
Что я делаю неправильно?
Ответы
Ответ 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