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

时间:2012-01-12 21:57:30

标签: javascript jquery

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

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

5 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

我尝试以状态400获取json响应,并且它适用于IE7,8和9,Firefox和Chrome(Safari未经过测试)。

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

答案 2 :(得分:1)

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

jQuery.Ajax

我认为你应该尝试一种不同的方法来处理服务器端的验证错误,返回状态代码200,但是使用像“error_count”这样的参数并从那里开始。

你可以发布一些你正在使用的代码(只是你正在使用的$ .ajax ......)?

答案 3 :(得分:0)

对于我(Chrome),xhr响应的responseText属性仅包含" BAD REQUEST"当statusCode为400时。感谢Steven的回复;我正在努力解决这个问题,因为在Postman中我可以获取从REST控制器返回的json数据,但是无法在jQuery Ajax响应中找到它。

答案 4 :(得分:0)

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

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

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

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