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

jan*_*mon 216 javascript php ajax error-handling jquery

我正在向我的jQuery发送错误响应.但是,我无法得到响应文本(在下面的示例中,这将是去海滩)

jQuery唯一说的就是"错误".

有关详情,请参阅此示例:

PHP

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

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 ! ");
    }
});
Run Code Online (Sandbox Code Playgroud)

现在我的结果是:

日志:

 [XMLHttpRequest readyState=4 status=500, "error", undefined]
Run Code Online (Sandbox Code Playgroud)

警报:

做不到因为:错误

有任何想法吗?

Ale*_*ini 292

尝试:

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

  • 我更喜欢使用JSON.parse(xhr.responseText) (122认同)
  • `eval`是EVIL ... http://stackoverflow.com/questions/646597/eval-is-evil-so-what-should-i-use-instead (63认同)
  • 在这里使用`eval`没有多大意义.如果要解析JSON响应,请使用`JSON.parse`.在OP的情况下,响应甚至不是JSON或JavaScript,所以你的'eval`只会导致一个SyntaxError. (16认同)
  • 在我的情况下,请求的服务器已关闭,并且“.responseText”和“.responseJSON”均未定义 (2认同)

tva*_*son 51

查看responseText请求参数的属性.


Hao*_* Li 51

对我来说,这只是工作:

error: function(xhr, status, error) {
  alert(xhr.responseText);
}
Run Code Online (Sandbox Code Playgroud)


Bra*_*rks 13

正如其他答案最终建议的那样,以及对此页面的评论:

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


小智 7

这对我有用

    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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • xhr.responseJSON 也可用。所以我们可以避免 $.parseJSON(xhr.responseText) (2认同)

Maz*_*aby 7

最好的简单方法:

error: function (xhr) {
var err = JSON.parse(xhr.responseText);
alert(err.message);
}
Run Code Online (Sandbox Code Playgroud)


Kar*_*n P 5

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

error: function(xhr, status, error) {
  alert(error);
}
Run Code Online (Sandbox Code Playgroud)