2012-06-22 118 views
8

我有一个意外触发error回调而不是success的jQuery AJAX发布请求。我有一个随机怀疑是它收到的302状态码,虽然这可能是错误的。jQuery.ajax认为什么是“成功”?

我看着the documentation,但我觉得有一点是不清楚的:什么是jQuery对成功请求的定义?

+0

我认为,当HTML或XML有HTTP 200响应。如果它基本上不是4xx/5xx代码,则为 – jcubic

+1

。 3xx它应该只是遵循重定向然后使用新的url返回的代码,反正2xx意味着http成功。 –

+0

我thinx 2xx和3xx响应是成功的。但不能批准它。 –

回答

6

如果响应介于199和300之间(> = 200和< 300)或等于304,并且responseText可以成功转换为您提供的数据类型(默认情况下为文本),则认为它是成功的请求。例如,如果您返回JSON并获得200响应状态但失败,则很可能是JSON解析器问题,这意味着您的JSON无效。

如果要返回HTML或XML,它失败,200响应状态,这个responseText不能分别转换为(在IE中经常会发生冲突与无效HTML/XML)

+0

我测试了它,并且302的普通状态代码导致错误。为了简单起见,对AJAX请求的肯定回应总是为200。 –

+1

非常有帮助!我查找了确切的代码,确定发生在[完成](https://github.com/jquery/jquery/blob/0d68b7877f761264bfe4950e4df156b854925a6b/src/ajax.js#L655)内部回调方法中。具体来说:[状态码检查](https://github.com/jquery/jquery/blob/0d68b7877f761264bfe4950e4df156b854925a6b/src/ajax.js#L683),[响应解析检查](https://github.com/jquery/jquery /blob/0d68b7877f761264bfe4950e4df156b854925a6b/src/ajax.js#L721) – pimlottc