jquery ajax在失败时不解析json

Rob*_*Rob 10 jquery

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

它适用于成功的请求,我正在设置正确的标头使用 dataType: 'json'

呼叫:

  $.ajax({
    type: 'POST',
    url: $form.attr('action'),
    data: post_data,
    dataType: 'json',
    done: done_callback,
    fail: fail_callback,
    always: always_callback
  });
Run Code Online (Sandbox Code Playgroud)

请求标题:

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
Run Code Online (Sandbox Code Playgroud)

响应标题:

Content-Type:application/json;charset=utf-8
Status:500
Run Code Online (Sandbox Code Playgroud)

responseText的:

{"status":"error","code":500,"message":"A system error occurred, please try again later"}
Run Code Online (Sandbox Code Playgroud)

responseJSON未定义

是这样的情况,当对ajax请求的响应不成功时,jQuery不会解析json吗? 我找不到任何文件来确认或否认这种行为(我可能只是看起来不够努力)

我显然可以parseJSONfail回调中使用.

Aru*_*hny 13

我看了一下jQuery ajax回调方法.dataType只有当它( status >= 200 && status < 300 || status === 304 )为真时才进行转换; 否则,响应将传递给相应的处理程序.也就是说,如果请求失败,则不会按预期解析响应dataType.

如果您想了解更多信息,可以在jquery.js文件中查找上述条件,看看它是否正常工作.

  • 这不再是真的:http://bugs.jquery.com/ticket/13917#comment:2"*在此提交时:[...]解析JSON在出现故障时可用作jqXHR实例的responseJSON字段.*" (2认同)