如何获取 jQuery $.ajax 错误响应文本?

问题描述 投票:0回答:13

我正在向我的 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]

警报:

无法执行,因为:错误

有什么想法吗?

php javascript jquery ajax error-handling
13个回答
352
投票

尝试:

error: function(xhr, status, error) {
  var err = eval("(" + xhr.responseText + ")");
  alert(err.Message);
}

73
投票

对我来说,这很有效:

error: function(xhr, status, error) {
  alert(xhr.responseText);
}

58
投票

查看请求参数的

responseText
属性。


27
投票

正如本页上的这个其他答案及其评论最终建议的那样:

error: function(xhr, status, error) {
  var err = JSON.parse(xhr.responseText);
  alert(err.Message);
}

11
投票

最好的简单方法:

error: function (xhr) {
var err = JSON.parse(xhr.responseText);
alert(err.message);
}

8
投票

这对我有用

    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);
        }
    }

5
投票

如果您想获得带有行号的语法错误,请使用此

error: function(xhr, status, error) {
  alert(error);
}

4
投票

你也可以尝试一下:

$(document).ajaxError(
    function (event, jqXHR, ajaxSettings, thrownError) {
        alert('[event:' + event + '], [jqXHR:' + jqXHR + '], [ajaxSettings:' + ajaxSettings + '], [thrownError:' + thrownError + '])');
    });

4
投票

这将允许您查看整个响应,而不仅仅是“responseText”值

error: function(xhr, status, error) {
    var acc = []
    $.each(xhr, function(index, value) {
        acc.push(index + ': ' + value);
    });
    alert(JSON.stringify(acc));
}

2
投票

我用过这个,效果很好。

error: function(xhr, status, error){
     alertify.error(JSON.parse(xhr.responseText).error);
}

0
投票

尝试此操作以在控制台中获得完整的错误详细信息。

error: function(XMLHttpRequest, textStatus, errorThrown) {
                    console.log("Error Thrown: " + errorThrown);
                    console.log("Text Status: " + textStatus);
                    console.log("XMLHttpRequest: " + XMLHttpRequest);
                    console.warn(XMLHttpRequest.responseText)
               }

-1
投票

如果您没有出现网络错误,并且想要从后端显示错误(例如权限不足),请使用 200 和错误消息来服务器响应。然后在您的成功处理程序中检查 data.status == 'error'


-1
投票

err.responseText
包含 HTML 标签,您可以轻松地从这些标签中获取错误消息...
例如:

$(err.responseText)
// k.fn.init(12) [text, title, text, meta, text, style, text, span, text, font, text, //comment]

$.ajax({
    async: bAsync,
    type: 'POST',
    url: pUrl,
    contentType: 'application/json; charset=utf-8;',
    dataType: 'json',
    data: pData,
    success: fn,
    error: function(err) {
        alert( $($(err.responseText)[1]).text() )
        debugger;
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.