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


79

我正在使用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');
        }
    },
});

更新:

@GeorgeCummins提到与响应主体一起工作似乎“看起来很奇怪”。这是我第一次尝试做这种事情。我的方法不是最佳实践吗?你会推荐什么?我在这里为此创建了另一个StackOverflow问题:当出现用户/表单验证错误时,我应该向AJAX请求发送什么响应/状态代码?

Answers:


101

如果您使用的是jQuery 1.5,则statusCode可以使用。

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

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

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


1
哦,我明白了。我还是那个想法data正在传递给错误的方法,但它实际上是jqXHRtextStatuserrorThrown
安德鲁

5
我喜欢您的回答,因为您提到了不同版本的jQuery之间的差异,而我最初并未注意到这些差异。
安德鲁

2
我在jQ 2.x上使用您的示例,状态始终为零(0),textStatus始终为“错误”,而errorthrown为空。有任何想法吗?我已完成的工作:加载页面后打开服务器以了解发生了什么。
Codebeat

当我得到状态代码419时,它对我有用,我可以处理该错误。

61

您应该使用以下statusCode设置创建操作图:

$.ajax({
  statusCode: {
    400: function() {
      alert('400 status code! user error');
    },
    500: function() {
      alert('500 status code! server error');
    }
  }
});

参考(滚动至:'statusCode')

编辑(回应评论)

如果您需要根据响应正文中返回的数据采取措施(这对我来说似乎很奇怪),则需要使用error:而不是statusCode:

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

我从那条路线开始,但是不知道如何获取数据。您如何访问响应主体?
安德鲁

@Andrew:为什么需要访问响应正文?您是否期望在发生400或500错误时返回有用的数据?
乔治·康明斯,

是的,我正在使用状态码400来进行表单验证错误。(不确定是否合适)
Andrew

在这种情况下,您可以在的正文中采取适当的表单验证操作吗400: function() {?只需删除alert()并添加必要的代码即可。
乔治·康明斯,

响应正文包含错误消息的html。如何从中访问请求正文400: function() {
安德鲁

10

另一种解决方案是使用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");
        }
    });
}

8

使用

   statusCode: {
    404: function() {
      alert('page not found');
    }
  }

--

$.ajax({
    type: 'POST',
    url: '/controller/action',
    data: $form.serialize(),
    success: function(data){
        alert('horray! 200 status code!');
    },
    statusCode: {
    404: function() {
      alert('page not found');
    },

    400: function() {
       alert('bad request');
   }
  }

});

2
您将如何捕获到意外的statusCode,在此版本的语法中是否有一个包罗万象的处理程序?
joedotnot
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.