在使用jquery和302重定向的ajax请求之后,Firefox中不会调用回调

在使用jquery和302重定向的ajax请求之后,Firefox中不会调用回调,jquery,ajax,http-status-code-302,Jquery,Ajax,Http Status Code 302,我有一个广泛使用ajax的Rails应用程序。使用jQuery。例如,其中一个模型完全由jQuery管理:记录以ajaxly方式创建、更新和删除。除了更新记录外,其他一切都很好 我做了一些测试,我认为Firefox中的jQuery(Mac上的3.6,Windows上的3.5是我测试过的)在检测服务器响应时存在问题,因为它302重定向到同一URL。我从Firebug中得到的是: POST localhost:3000/resources/1->302已找到 获取localhost:3000/res

我有一个广泛使用ajax的Rails应用程序。使用jQuery。例如,其中一个模型完全由jQuery管理:记录以ajaxly方式创建、更新和删除。除了更新记录外,其他一切都很好

我做了一些测试,我认为Firefox中的jQuery(Mac上的3.6,Windows上的3.5是我测试过的)在检测服务器响应时存在问题,因为它302重定向到同一URL。我从Firebug中得到的是:

POST localhost:3000/resources/1->302已找到

获取localhost:3000/resources/1->200确定

并且没有调用jQuery的ajax回调。既不成功,也不完整,也不错误。 但当我创建一个记录并将服务器重定向到另一个URL时,调用“success”回调:

发布本地主机:3000/资源->找到302

获取localhost:3000/resources/1->200确定

无论我是自己调用$.ajax还是使用jquery.form的ajaxForm()


有什么想法吗?

301/302/303重定向是由浏览器的XmlHttpRequest处理程序完成的,而不是jQuery。这并不能解释为什么您没有成功回调。但这可能解释了为什么重定向没有在ajax端得到很好的测试

一个问题是,某些浏览器确实遵循302,而不是301或303重定向。在一个旧的应用程序中,我们使用了303 see other响应代码,并在错误处理程序中处理它。这很好,因为我们可以执行新的GET请求,而不是浏览器(浏览器有缺陷,应该这样做)

但我们有问题,这取决于浏览器(我想,不确定)


当我看到您的302响应行为时,我认为您应该像我们所做的那样:在对ajax请求进行后期处理后删除重定向。在响应中发送您想要的最终HTML(这将是重定向服务器端),或者构建您自己的协议(基于JSON?),您可以在JSON密钥中发送协议状态,也可以发送一个新url以检查另一个密钥中的新响应,等等。

AJAX和重定向很难协同工作。浏览器各不相同,缓存可能是罪魁祸首。最简单的解决方案是消除这种重定向,因为在AJAX中执行“后重定向获取”没有多大意义。正如kijin所说,尝试在AJAX设置中添加
cache:false
。看看这是否有效。@Anders,谢谢,但这不起作用:(到目前为止,消除重定向似乎是最好的解决方案。如果你能做到这一点,是的,这将是最好的解决方案。搜索so会得到相同的结果:我知道XmlHttpRequest,但jQuery对其进行了包装,因此它可能也是一个重要因素。我想我将删除重定向,或者给自己的支持者打电话。谢谢!