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

Получение тела ответа AJAX для использования в обратном вызове ошибки

Функция jQuery AJAX имеет следующие параметры:

error(XMLHttpRequest, textStatus, errorThrown)

Какой лучший способ перекрестного браузера получить тело ответа?

Это работает (надежно во всех браузерах)?

$.ajax({
  error: function(http) {
    alert(http.responseText);
  }
});
4b9b3361

Ответ 1

Существует скрытая функция, которая может извлекать данные из XHR istance:

var responseText = $.httpData(xhr)

Если вы передадите "json" в качестве второго параметра, он обработает ответ как строку JSON.

Обратите внимание, что вы можете получить сообщение об ошибке, потому что ответа нет (например, проблема с сетью). Удостоверьтесь, что вы также закрываете этот случай. Кроме того, я считаю (не уверен), что jQuery вызывает обработчик error, если сервер возвращает статус 4xx или 5xx.

Ответ 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 здесь