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

IT技术 php javascript jquery ajax error-handling
2021-02-04 18:24:32

我正在向我的 jQuery 发送错误响应。但是,我无法获得响应文本(在下面的示例中,这将是Gone to the beach

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]

警报:

不能做,因为:错误

有任何想法吗?

6个回答

尝试:

error: function(xhr, status, error) {
  var err = eval("(" + xhr.responseText + ")");
  alert(err.Message);
}
JSON.parse 需要 IE8+。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...)。如果需要支持旧浏览器,请使用 $.parseJSON(来自 jQuery,api.jquery.com/jQuery.parseJSON
2021-03-17 18:24:32
不会改变xhr未定义的事实
2021-03-25 18:24:32
使用eval这里没有多大意义。如果要解析 JSON 响应,请使用JSON.parse. 在 OP 的情况下,响应甚至不是 JSON 或 JavaScript,因此您eval只会导致 SyntaxError。
2021-03-26 18:24:32
eval是邪恶的... stackoverflow.com/questions/646597/ ...
2021-03-29 18:24:32
我更喜欢使用 JSON.parse(xhr.responseText)
2021-04-04 18:24:32

对我来说,这很简单:

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

查看responseText请求参数属性。

我发现了问题。实际上,jquery 在创建 JSONP 请求时根本不会创建 XHR 对象。JSON-Padding 只是添加了指向 URL 的动态脚本引用,并且 json 数据将用一个被调用的方法包装。所以根本不使用XHR。
2021-03-15 18:24:32
你如何将 repsponseText 解析为一个 json 对象?
2021-03-26 18:24:32
我在 IE8 中有一个“解析器错误”问题,但正在 IE7 中处理跨域 JSONP 请求。但是 responseText 属性在哪里?在调试期间检查响应对象时,我在任何地方都看不到它。我只看到了 $.ajax() 请求对象的 readyState、status、statusText 和其他方法。
2021-04-01 18:24:32
有 IE8 和跨域问题。今天花了一整天:(。stackoverflow.com/questions/8165557/...
2021-04-05 18:24:32
xhr 对象应具有 responseText 或 responseXML,具体取决于响应的 MIME 类型。
2021-04-09 18:24:32

正如这个其他答案最终所建议的那样,它是本页上的评论

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