Получение тела ответа AJAX для использования в обратном вызове ошибки
Функция jQuery AJAX имеет следующие параметры:
error(XMLHttpRequest, textStatus, errorThrown)
Какой лучший способ перекрестного браузера получить тело ответа?
Это работает (надежно во всех браузерах)?
$.ajax({
error: function(http) {
alert(http.responseText);
}
});
Ответы
Ответ 1
Существует скрытая функция, которая может извлекать данные из XHR istance:
var responseText = $.httpData(xhr)
Если вы передадите "json"
в качестве второго параметра, он обработает ответ как строку JSON.
Обратите внимание, что вы можете получить сообщение об ошибке, потому что ответа нет (например, проблема с сетью). Удостоверьтесь, что вы также закрываете этот случай. Кроме того, я считаю (не уверен), что jQuery вызывает обработчик error
, если сервер возвращает статус 4xx
или 5xx
.
Ответ 2
Как и в jQuery 1.4.1, вы должны использовать:
var json = $.parseJSON(xhr.responseText);
См. http://api.jquery.com/jQuery.parseJSON/.
Ответ 3
Для более недавнего и общего ответа (начиная с jquery 1.5) я бы использовал объект jqXHR
:
$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText);
})
В качестве альтернативы responseJSON
можно использовать для получения уже обработанного тела ответа
$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR.responseJSON);
})
Ответ 4
Один простой пример использования с jQuery:
var url = '/';
$.get(url).then(
function(response) {
$("#result").html(response);
},
function(jqXHR) {
$("#result").html('Error occurred: '+ jqXHR.statusText + ' ' + jqXHR.status);
}
);
Это должно возвращать HTML-страницу текущей страницы сайта.
Затем попробуйте ввести бессмысленный URL-адрес, который не существует, и посмотрите на возникшую ошибку.
Вы должны получить "404 Not Found" с веб-сервера. Проверьте это: JSFiddle здесь