jQuery:如何从$.ajax.error方法中获取HTTP状态代码?

jQuery:如何从$.ajax.error方法中获取HTTP状态代码?,jquery,Jquery,我正在使用jQuery发出AJAX请求。无论HTTP状态代码是400错误还是500错误,我都希望执行不同的操作。我怎样才能做到这一点 $.ajax({ type: 'POST', url: '/controller/action', data: $form.serialize(), success: function(data){ alert('horray! 200 status code!'); }, error: functi

我正在使用jQuery发出AJAX请求。无论HTTP状态代码是400错误还是500错误,我都希望执行不同的操作。我怎样才能做到这一点

$.ajax({
    type: 'POST',
    url: '/controller/action',
    data: $form.serialize(),
    success: function(data){
        alert('horray! 200 status code!');
    },
    error: function(data){
        //get the status code
        if (code == 400) {
            alert('400 status code! user error');
        }
        if (code == 500) {
            alert('500 status code! server error');
        }
    },
});
更新:
@乔治康明斯提到,与反应机构合作“似乎很奇怪”。这是我第一次尝试做这种事情。我的方法不是最佳实践吗?你推荐什么?我在这里为这个问题创建了另一个StackOverflow问题:

您应该使用
statusCode
设置创建一个动作图:

$.ajax({
  statusCode: {
    400: function() {
      alert('400 status code! user error');
    },
    500: function() {
      alert('500 status code! server error');
    }
  }
});
(滚动至:“状态代码”)

编辑(回应评论)

如果需要根据响应正文中返回的数据采取操作(我觉得这很奇怪),则需要使用
error:
而不是
statusCode:

error:function (xhr, ajaxOptions, thrownError){
    switch (xhr.status) {
        case 404:
             // Take action, referencing xhr.responseText as needed.
    }
} 
使用

-


如果您使用的是jQuery1.5,那么
statusCode
将起作用

如果您使用的是jQuery 1.4,请尝试以下操作:

error: function(jqXHR, textStatus, errorThrown) {
    alert(jqXHR.status);
    alert(textStatus);
    alert(errorThrown);
}

您应该可以从第一个警报中看到状态代码。

另一种解决方案是使用response.status函数。这将为您提供ajax调用返回的http状态

function checkHttpStatus(url) {     
    $.ajax({
        type: "GET",
        data: {},
        url: url,
        error: function(response) {
            alert(url + " returns a " + response.status);
        }, success() {
            alert(url + " Good link");
        }
    });
}

我沿着这条路线开始,但不知道如何获取数据。您如何访问响应体?@Andrew:为什么需要访问响应体?您是否希望在发生400或500错误时返回有用的数据?是的,我正在使用400状态代码来表示表单验证错误。(不确定这是否合适)在这种情况下,您能否在
400:function(){
的主体中执行适当的表单验证操作。只需删除警报()并添加必要的代码。为什么告诉API调用方确切的问题而不是仅仅告诉他们400是很奇怪的。哦,我看到了我的问题。我想
数据
被传递到了error方法,但实际上是
jqXHR
textStatus
,和
errorshorn
我喜欢你的答案,因为您提到了不同版本的jQuery之间的差异,这一点我一开始没有注意到。我在jq2.x上使用了您的示例,状态始终为零(0),textStatus always'error'和ErrorSwink为空。有什么想法吗?我所做的:在加载页面后打开服务器以了解发生了什么。当我得到状态代码419时,它对我起了作用,我可以处理错误。您如何捕获意外的状态代码,此版本的语法中是否有catch all或else处理程序?这是解决方案是最好的
error: function(jqXHR, textStatus, errorThrown) {
    alert(jqXHR.status);
    alert(textStatus);
    alert(errorThrown);
}
function checkHttpStatus(url) {     
    $.ajax({
        type: "GET",
        data: {},
        url: url,
        error: function(response) {
            alert(url + " returns a " + response.status);
        }, success() {
            alert(url + " Good link");
        }
    });
}