Получение тела ответа AJAX для использования при обратном вызове ошибки - PullRequest
43 голосов
/ 18 января 2010

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

error(XMLHttpRequest, textStatus, errorThrown)

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

Работает ли это (надежно во всех браузерах)?

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

Ответы [ 4 ]

77 голосов
/ 29 апреля 2011

Начиная с jQuery 1.4.1, вы должны использовать:

var json = JSON.parse(xhr.responseText);

См. http://api.jquery.com/jQuery.parseJSON/.

20 голосов
/ 21 мая 2014

Для более свежего и общего ответа (начиная с 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);
})
1 голос
/ 22 ноября 2017

Один простой пример использования с 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 здесь

0 голосов
/ 18 января 2010

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

var responseText = $.httpData(xhr)

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...