失败时传递给回调的 jQuery 的 jqXHR 对象不会解析 json 响应,因此,responseJSON 未定义,只有 responseText 可用。
它对于成功的请求效果很好,我使用 dataType: 'json'
设置正确的 header
调用:
$.ajax({
type: 'POST',
url: $form.attr('action'),
data: post_data,
dataType: 'json',
done: done_callback,
fail: fail_callback,
always: always_callback
});
请求 header :
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
响应 header :
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
。
最佳答案
我研究了 jQuery ajax 回调方法。它执行 dataType
仅当 ( status >= 200 && status < 300 || status === 304 )
时才转换是真的;否则,响应将被传递到相应的处理程序。也就是说,如果请求失败,则不会按照预期的 dataType
解析响应。 .
如果您想了解更多信息,可以在 jquery.js 文件中查找上述条件并查看其工作情况。
关于jquery ajax 失败时不解析 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9821396/