如果服务器以401/402状态响应,是否会触发Deferred.fail()?

时间:2015-10-05 18:29:39

标签: javascript jquery http

当Deferred对象被拒绝时,文档说失败()被触发

然而,这听起来很模糊,我不明白何时会从HTTP角度触发它。所有400/500状态代码最终都会落入fail()处理程序吗?

1 个答案:

答案 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),那么你的失败回调也会被调用。