当Deferred对象被拒绝时,文档说失败()被触发。
然而,这听起来很模糊,我不明白何时会从HTTP角度触发它。所有400/500状态代码最终都会落入fail()处理程序吗?
答案 0 :(得分:2)
为Clarity编辑:
jQuery源代码中的这一行将告诉你jQuery
如何尊重HTTP语义:
isSuccess = status >= 200 && status < 300 || status === 304;
https://github.com/jquery/jquery/blob/master/src/ajax.js#L722
原始答案:
4xx和5xx是HTTP错误代码。 jQuery ajax将为所有这些事件触发一个失败事件。
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
成功(2xx)回复不会失败。 jQuery还将遵循重定向(3xx)状态代码,因此它们不会被视为错误,除非它的重定向产生4xx或5xx状态。
正如carhlietfl在评论中指出的那样,如果来自服务器的响应不是你告诉jQuery期望的,那么成功的(2xx)响应仍然可以触发失败事件 - 例如如果你说dataType:'json'
并发回了JSON
之外的其他内容(包括格式不正确JSON
),那么你的失败回调也会被调用。