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

And*_*rew 68 jquery

我正在使用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');
        }
    },
});
Run Code Online (Sandbox Code Playgroud)

更新:

@GeorgeCummins提到与响应机构合作"似乎很奇怪".这是我第一次尝试做这类事情.我的方法不是最佳做法吗?你会推荐什么?我在这里为此创建了另一个StackOverflow问题:当存在用户/表单验证错误时,我应该向AJAX请求发送什么响应/状态代码?

Ale*_*lds 89

如果你使用的是jQuery 1.5,那么statusCode就行了.

如果你正在使用jQuery 1.4,试试这个:

error: function(jqXHR, textStatus, errorThrown) {
    alert(jqXHR.status);
    alert(textStatus);
    alert(errorThrown);
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我喜欢你的答案,因为你提到了不同版本的jQuery之间的差异,我最初没有注意到. (5认同)
  • 我在jQ 2.x上使用您的示例,状态始终为零(0),textStatus始终为“错误”,错误抛出为空。有任何想法吗?我已完成的工作:加载页面后打开服务器以了解发生了什么。 (2认同)

Geo*_*ins 57

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

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

参考(滚动到:'statusCode')

编辑(回应评论)

如果你需要根据响应体中返回的数据采取行动(这对我来说似乎很奇怪),你需要使用error:而不是statusCode:

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

  • 为什么告诉 API 调用者确切的问题是什么而不是直接告诉他们 400 会很奇怪。 (3认同)
  • 是的,我使用状态代码 400 来表示表单验证错误。(不确定这样是否合适) (2认同)

gen*_*sis 7

使用

   statusCode: {
    404: function() {
      alert('page not found');
    }
  }
Run Code Online (Sandbox Code Playgroud)

-

$.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');
   }
  }

});
Run Code Online (Sandbox Code Playgroud)

  • 您将如何捕获意外的 statusCode,在此版本的语法中是否有全能或其他处理程序? (3认同)

Cod*_*rer 5

另一种解决方案是使用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");
        }
    });
}
Run Code Online (Sandbox Code Playgroud)