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

我正在使用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提到与响应团体合作“似乎很奇怪”。 这是我第一次尝试做这种事情。 我的方法不是最佳做法吗? 你会推荐什么? 我在这里为此创build了另一个StackOverflow问题: 当存在用户/表单validation错误时,应该向AJAX请求发送什么响应/状态代码?

如果你使用的是jQuery 1.5,那么statusCode将会起作用。

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

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

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

您应该使用statusCode设置创build一个动作映射:

 $.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. } } 

使用

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

另一个解决scheme是使用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"); } }); }