如何获得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]

警告:

不能做是因为:错误

什么好主意吗?

715746 次浏览

查看请求参数的responseText属性。

试一试:

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

你也可以试试:

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

如果您没有网络错误,并且希望从后端显示错误,例如权限不足,则使用200和错误消息作为服务器响应。然后在成功处理程序中检查数据。Status == 'error'

对我来说,这很简单:

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

这对我来说很管用

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

如果你想获得带有行号的语法错误,使用这个

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

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

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

正如本页这是另一个答案,它是注释最终建议的那样:

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

最好的简单方法:

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

我用过这个,效果很好。

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

err.responseText包含HTML标签,你可以很容易地从这些标签得到错误信息 例如:< / p >

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

尝试在控制台中有完整的错误细节。

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