getting the error response from an ajax request in jquery
无论如何,我的web服务器都会向任何ajax请求返回json响应。 如果响应成功,它将返回状态代码为200的json。如果出现错误,它将返回状态代码为400或500的json。我需要获取该信息,即使请求 是400或500,因为json响应有错误消息,需要呈现给用户。
问题是如果状态代码不是200,jquery $ .ajax函数不允许您访问响应对象,对吗? 有没有办法做到这一点?
-
如果您返回带有错误消息的JSON,则应返回http状态为200,这意味着http请求已成功但出现业务错误。
您可以覆盖内部使用的jQuery.httpSuccess方法来确定请求是否成功,例如:
1
| jQuery.httpSuccess = function() { return true; } |
这将使您的success处理程序在400/500范围内的状态代码上执行。
注意:稍后可能会更改为jQuery.ajax.httpSuccess。
当然可以。 只有在调用成功时才会调用success函数,但在出现错误时调用error回调 - 包括200以外的HTTP状态。
1
| $.ajax({..., error: function(XMLHttpRequest, textStatus, errorThrown) { ... } }); |
-
这是不一样的,因为你在这里没有像success中那样的JSON对象。
-
哦。完全正确。我误解了这个问题。我同意klausbyskov的观点,即在服务器仍能生成有效JSON响应的情况下返回非200 HTTP状态代码的想法有点令人不安。
-
@VoteyDicipline,那么这样做的正确方法是什么?用户尝试触发ajax POST请求,但请求包含无效数据,响应代码不应为200,对吗? IMO中,在json的某处返回带有"Error"的200响应似乎更加错误。
-
HTTP状态描述服务器是否能够处理HTTP请求。如果您的服务器获取数据,查看数据并返回结果,即200。为了进行比较,请考虑如果您使用Google"khjafhkagjf ahkfgahjkgdf"会发生什么 - 这是一个完全无效的查询,但Google仍然可以收到它,了解它无效,并返回结果 - 您获得的页面是200。这与访问www.google.com/404不同,后者服务器无法为您的请求提供服务。
您可以轻松检索它:
1 2 3 4 5 6
| $.ajax({
// your options
success: function(data, xhr) {
alert(xhr.status);
}
}); |
-
当状态代码不是200时,不会调用success。
-
嗯,我应该说不,其他状态被视为成功,请参阅:// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450 return !xhr.status && location.protocol ==="file:" || xhr.status >= 200 && xhr.status < 300 || xhr.status === 304 || xhr.status === 1223;