在jQuery中,我正在向服务器提交表单。当出现验证错误时,我从服务器收到400错误,并且文档正文是有效的JSON。我想知道如何访问从服务器返回的数据。
我永远不会调用jQuery.Ajax对象上的.error回调函数,所以我使用的是.statusCode {400}函数。这运行得很好,但是没有一个参数包含响应体。
答案 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作为回调函数不返回任何数据。
我认为你应该尝试一种不同的方法来处理服务器端的验证错误,返回状态代码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)