如何使用jQuery.Ajax访问400错误的JSON响应

How do I access the JSON response with jQuery.Ajax for a 400 error?

本文关键字:错误 JSON 响应 访问 何使用 jQuery Ajax      更新时间:2023-09-26

在jQuery中,我向服务器提交表单。当出现验证错误时,我从服务器收到一个400错误,并且文档的主体是有效的JSON。我想知道如何访问从服务器返回的数据。

我在jQuery.Ajax对象上的.error回调函数从未被调用,所以我使用.statusCode{400}函数。这运行得很好,但是没有一个参数包含响应体。

我试图获得状态为400的json响应,它适用于IE7,8和9、Firefox和Chrome(Safari未测试)。

...
error: function(xhr) {
   error(xhr.responseText);
}
...

如果HTTP状态不是2xx,一些浏览器的XHR实现将拒绝提供响应体。在API设计中,当我无法控制我的客户时,我不得不求助于做一些事情,比如总是返回200,并以其他方式指示成功/失败/状态(例如,作为JSON响应中的顶级属性)。

我在回调中使用statusCode没有遇到任何问题,但是,statusCode作为回调函数不会返回任何数据。

jQuery.Ajax

我认为您应该尝试一种不同的方法来处理服务器端的验证错误,返回状态代码200,但使用类似"error_count"的参数,然后从那里开始。

你能发布一些你正在使用的代码吗(你只使用$.ajax…)?

对于我(Chrome)来说,当statusCode为400时,xhr响应的responseText属性只包含"BAD REQUEST"。感谢史蒂文的回复;我一直在努力解决这个问题,因为在Postman中,我可以获得从REST控制器返回的json数据,但在jQueryAjax响应中找不到。

"如果指定了json,则在将响应作为对象传递给成功处理程序之前,将使用jQuery.parseJSON解析响应。解析的json对象通过jqXHR对象的responseJSON属性可用。"

http://api.jquery.com/jquery.ajax/

如果您使用问题中提到的statusCode指定回调:

"如果请求成功,状态代码函数采用与成功回调相同的参数;如果它导致错误(包括3xx重定向),它们采用与错误回调相同的值。"(jqXHR,textStatus,errorThrown)