Как получить текст ответа на ошибку jQuery $.ajax?


Я отправляю ответ об ошибке на свой 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 ! ");
    }
});

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

Журнал:

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

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

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

Есть идеи?

Author: robsch, 2009-10-28

11 answers

Попробуйте:

error: function(xhr, status, error) {
  var err = eval("(" + xhr.responseText + ")");
  alert(err.Message);
}
 250
Author: Alex Bagnolini, 2017-06-23 16:03:37

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

 46
Author: tvanfosson, 2012-08-01 20:58:40

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

error: function(xhr, status, error) {
  alert(xhr.responseText);
}
 39
Author: HaoQi Li, 2013-08-15 18:03:12

Это то, что сработало для меня

    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);
        }
    }
 7
Author: user3255682, 2014-01-31 02:01:01

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

error: function(xhr, status, error) {
  var err = JSON.parse(xhr.responseText);
  alert(err.Message);
}
 7
Author: Brad Parks, 2017-05-23 11:54:48

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

$(document).ajaxError(
    function (event, jqXHR, ajaxSettings, thrownError) {
        alert('[event:' + event + '], [jqXHR:' + jqXHR + '], [ajaxSettings:' + ajaxSettings + '], [thrownError:' + thrownError + '])');
    });
 3
Author: 85tisgirjetuji8, 2011-11-24 23:17:24

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

error: function(xhr, status, error) {
    var acc = []
    $.each(xhr, function(index, value) {
        acc.push(index + ': ' + value);
    });
    alert(JSON.stringify(acc));
}
 3
Author: Kareem, 2016-03-15 11:50:29

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

error: function(xhr, status, error) {
  alert(error);
}
 2
Author: Karthikeyan P, 2015-10-09 14:34:53

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

 0
Author: chovy, 2012-10-08 06:21:28

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

error: function (xhr) {
var err = JSON.parse(xhr.responseText);
alert(err.message);
}
 0
Author: Mazen Embaby, 2018-04-19 18:07:56

Функция showErrorMessage(xhr, статус, ошибка){ если (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);
    }
}
 0
Author: Dude384, 2018-06-11 07:48:47