jQuery.ajax认为哪些响应是“成功”的?

9
我有一个jQuery AJAX post请求,意外地触发了error回调而不是success回调。我有一个随机的怀疑是它收到的302状态代码,尽管可能是错误的。
我查看了文档资料,但我觉得有一件事情还不太清楚:jQuery对成功请求的定义是什么?

我认为当出现HTTP 200响应时。 - jcubic
1
如果不是4xx/5xx代码,基本上就是这样。3xx应该只是跟随重定向,然后使用新URL返回的代码,2xx表示HTTP成功无论如何。 - Marc B
3
如果响应码是 2xx 或 3xx 并且返回的数据类型与预期一致且有效,则应将响应视为成功。 - Kevin B
3xx是不准确的,实际上只是304,请参见James的答案。 - Kevin B
2
对于那些看不到我的回答(现已删除)的人,它指出了jQuery源代码中的一行代码(if ( status >= 200 && status < 300 || status === 304 ))。但是,正如@KevinB之前所述,这不仅仅涉及状态码。 - James Allardice
显示剩余2条评论
1个回答

8
如果响应状态码在199到300之间(大于等于200且小于300)或等于304,并且响应文本可以成功转换为您提供的数据类型(默认为文本),则认为是成功的请求。
例如,如果您返回JSON并且得到200个响应状态码但失败了,则很可能是JSON解析器问题,这意味着您的JSON无效。
如果您返回HTML或XML并且它以200个响应状态码失败,则响应文本无法分别转换为HTML或XML(常见于IE中的无效html/xml)。

我进行了测试,仅返回 302 的普通状态代码会导致错误。为了简单起见,对于 AJAX 请求的肯定响应最好始终是 200。 - Brad Koch
1
非常有帮助!我查找了确切的代码,确定发生在 done 内部回调方法中。具体来说:状态码检查响应解析检查 - pimlottc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接