Как получить текст ответа об ошибке jQuery $ .ajax? - PullRequest
209 голосов
/ 28 октября 2009

Я отправляю сообщение об ошибке на мой jQuery. Однако я не могу получить текст ответа (в приведенном ниже примере это будет Ушел на пляж )

Единственное, что jQuery говорит, это «ошибка».

Подробности см. В этом примере:

PHP

<?
    header('HTTP/1.1 500 Internal Server Error');
    print "Gone to the beach"
?>

JQuery

$.ajax({
    type:     "post",
    data:     {id: 0},
    cache:    false,
    url:      "doIt.php",
    dataType: "text",
    error: function (request, error) {
        console.log(arguments);
        alert(" Can't do because: " + error);
    },
    success: function () {
        alert(" Done ! ");
    }
});

Теперь мой результат:

.log:

 [XMLHttpRequest readyState=4 status=500, "error", undefined]

предупреждение:

Не могу сделать, потому что: ошибка

Есть идеи?

Ответы [ 10 ]

281 голосов
/ 28 октября 2009

Попробуйте:

error: function(xhr, status, error) {
  var err = eval("(" + xhr.responseText + ")");
  alert(err.Message);
}
50 голосов
/ 28 октября 2009

Посмотрите на свойство responseText параметра запроса.

49 голосов
/ 15 августа 2013

Для меня это просто работает:

error: function(xhr, status, error) {
  alert(xhr.responseText);
}
12 голосов
/ 05 мая 2016

Как в конечном итоге предлагает этот другой ответ и его комментарии на этой странице:

error: function(xhr, status, error) {
  var err = JSON.parse(xhr.responseText);
  alert(err.Message);
}
7 голосов
/ 31 января 2014

Вот что у меня сработало

    function showErrorMessage(xhr, status, error) {
        if (xhr.responseText != "") {

            var jsonResponseText = $.parseJSON(xhr.responseText);
            var jsonResponseStatus = '';
            var message = '';
            $.each(jsonResponseText, function(name, val) {
                if (name == "ResponseStatus") {
                    jsonResponseStatus = $.parseJSON(JSON.stringify(val));
                     $.each(jsonResponseStatus, function(name2, val2) {
                         if (name2 == "Message") {
                             message = val2;
                         }
                     });
                }
            });

            alert(message);
        }
    }
3 голосов
/ 15 марта 2016

Это позволит вам увидеть весь ответ, а не только значение responseText

error: function(xhr, status, error) {
    var acc = []
    $.each(xhr, function(index, value) {
        acc.push(index + ': ' + value);
    });
    alert(JSON.stringify(acc));
}
3 голосов
/ 25 ноября 2011

вы тоже можете попробовать:

$(document).ajaxError(
    function (event, jqXHR, ajaxSettings, thrownError) {
        alert('[event:' + event + '], [jqXHR:' + jqXHR + '], [ajaxSettings:' + ajaxSettings + '], [thrownError:' + thrownError + '])');
    });
2 голосов
/ 09 октября 2015

Если вы хотите получить Синтаксическая ошибка с номером строки, используйте эту

error: function(xhr, status, error) {
  alert(error);
}
1 голос
/ 19 апреля 2018

Лучший простой подход:

error: function (xhr) {
var err = JSON.parse(xhr.responseText);
alert(err.message);
}
0 голосов
/ 08 октября 2012

Если у вас нет сетевой ошибки и вы хотите обнаружить ошибку из бэкэнда, например, из-за недостаточных привилегий, отправьте в ответ на ваш запрос 200 и сообщение об ошибке. Затем в вашем обработчике успеха проверьте data.status == 'error'

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