jquery ajax在出现故障时不解析json

jquery ajax在出现故障时不解析json,jquery,Jquery,失败时传递给回调的jQuery的jqXHR对象不解析json响应,因此responseJSON未定义,只有responseText可用 对于成功的请求,它工作得很好,我正在使用dataType:'json' 电话: 请求标头: Accept:application/json, text/javascript, */*; q=0.01 X-Requested-With:XMLHttpRequest User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X

失败时传递给回调的jQuery的jqXHR对象不解析json响应,因此responseJSON未定义,只有responseText可用

对于成功的请求,它工作得很好,我正在使用
dataType:'json'

电话:

请求标头:

Accept:application/json, text/javascript, */*; q=0.01
X-Requested-With:XMLHttpRequest
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11
响应标题:

Content-Type:application/json;charset=utf-8
Status:500
答复正文:

{"status":"error","code":500,"message":"A system error occurred, please try again later"}
responseJSON未定义

当对ajax请求的响应不成功时,jQuery是否不解析json? 我找不到任何文件证实或否认这种行为(我可能只是看得不够仔细)


显然,我可以在
fail
回调中使用
parseJSON

我猜您要查找的是
数据。status
数据。statusText
我研究了jQuery ajax回调方法。只有当
(status>=200和&status<300 | | status==304)
为真时,它才会执行
数据类型的转换;否则,响应将被传递给相应的处理程序。也就是说,如果请求失败,则响应不会按照预期的
数据类型进行分析


如果您想了解更多信息,可以在jquery.js文件中查找上述条件,并查看其工作情况。

自jquery 1.5版以来,添加了状态码处理程序:

$.ajax({
  statusCode: {
    404: function() {
      alert("page not found");
    }
  }
});
但是,在早期版本中,当返回错误状态时,应单独解析响应文本:

$.ajax({
  success: function(response) {
    data = $.evalJSON(response);
    alert(data);
  },
  error: function(response) {
    data = $.evalJSON(response.responseText);
    alert(data);
  }
});

一个“数据”对象不会传递给失败回调,只有成功,我希望我的json作为一个对象对我来说是新的,我现在构建的应用程序是一个Web应用程序,大约有100个ajax调用,我在每个调用中都使用它。错误:函数(数据){alert(“数据:“+data.status+”+data.statusText);}'我对itdata没有任何问题。statusText就是HTTP1.1定义的文本,在我的例子中是“内部服务器错误”。这不是我想要的,我想要的是类型链接后的实际响应对象,而不是XHR对象,就像您在成功回调中得到的一样。例如:
{error:“error”,状态:500,消息:“我们现在无法接收您的消息。”}
确实,您很正确。你知道为什么jquery有这种特殊的编码吗?看起来很奇怪,响应数据即使对于错误也是有效的。HTTP1.1说“除了响应HEAD请求外,服务器应该包含一个包含错误情况解释的实体”。我认为这是因为他们假设如果请求失败,那么响应内容可能不可靠。这不再是真的:“自提交之日起:[…]解析后的JSON在出现故障时可用,作为jqXHR实例的responseJSON字段。“@Ashe/Amelia您所引用的票据中的注释似乎不准确。如果您在票据注释链接的提交消息中向上滚动一点,它就会被删除。@jpaugh:(a)为了清楚起见,我们这里讨论的是5年前的代码。(b) 这对我来说不明显?看起来很清楚,你说得对。响应内容在出现错误时未
eval
ed。如果您收到的JSON有500个错误,请自己解析。是的@Arun非常正确地向我指出,jquery做出了不通过类型转换器传递响应的决定。我认为本机函数是parseJSON而不是evalJSON,我使用jquery 1.11.0得到:“evalJSON不是函数”
$.ajax({
  success: function(response) {
    data = $.evalJSON(response);
    alert(data);
  },
  error: function(response) {
    data = $.evalJSON(response.responseText);
    alert(data);
  }
});