1

我正在尝试适当地处理可能由 jQuery 中的任何 AJAX 调用返回的 HTTP 状态错误(404、501 等)(我使用的是 1.6.4 版)但是对于我的一生,我无法摆脱适当的响应代码(所有值都是“0”或“错误”,没有更具体的)。

更新:在这里创建了一个 JSFIDDLE

更新:statusCode: { *** }根据 3nigma 的建议添加但不会触发

<!DOCTYPE html><html>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
    <script type="text/javascript">
        function doAjax()
        {
            $.ajax({
                type: "GET",
                url: "http://www.non-existant-url.com/",
                success: function(data, textStatus, jqXHR){
                    alert("Success");
                },
                error: function (xhr, textStatus, errorThrown) {
                     console.log("xhr.status: " + xhr.status);
                     console.log("xhr.statusText: " + xhr.statusText);
                     console.log("xhr.readyState: " + xhr.readyState);
                     console.log("xhr.responseText: " + xhr.responseText);
                     console.log("xhr.responseXML: " + xhr.responseXML);
                     console.log("textStatus: " + textStatus);
                     console.log("errorThrown: " + errorThrown);
                     console.log("xhr.redirect: " + xhr.redirect);
                        },
                statusCode: {
                    404: function () { console.log("404"); },
                    501: function () { console.log("501"); },
                    502: function () { console.log("502"); }
                }
            });
        }
    </script>
</head>
<body><button onclick="doAjax();">Do AJAX</button></body>
</html>

我得到的输出如下:

控制台输出

仅供参考,我在...研究过文档

http://api.jquery.com/jQuery.ajax/ (“错误(jqXHR,textStatus,errorThrown)”部分) http://api.jquery.com/jQuery.ajax/#jqXHR

但 jqXHR 似乎没有正确填充。我一定是做错了什么,我现在已经没有想法了,所以我真的很感激一些帮助。谢谢!

4

2 回答 2

3

尝试使用statusCode在 jquery 1.5 中添加

$.ajax({
  ...
  statusCode: {
    502: function() {
      alert('502');
    }
  }
});
于 2011-10-07T09:25:26.267 回答
2

我是个笨蛋,出于安全原因,ajax 不能跨域工作。如果我更改 url 使其定位到与主机相同的域,那么状态代码和文本等就会奇迹般地填充。

我在这里添加了另一个 JSFIDDLE 示例来演示这一点

于 2011-10-07T16:22:45.083 回答