我有一个广泛使用ajax的Rails应用程序。用jQuery。例如,其中一个模型完全使用jQuery进行管理:ajaxly创建,更新和删除记录。除了更新记录外,Evertything的效果很好。
我做了一些测试,我认为Firefox中的jQuery(Mac上的3.6,Windows上的3.5是我测试过的)在 302重定向到相同的URL时检测服务器响应时出现问题。我在Firebug中得到的是:
POST localhost:3000 / resources / 1 - >找到302
GET localhost:3000 / resources / 1 - > 200 OK
并且没有调用jQuery的ajax回调。无论是成功,完成还是错误。 但是当我创建一个记录并且服务器重定向到另一个URL时,“成功”回调被称为:
POST localhost:3000 / resources - >找到302
GET localhost:3000 / resources / 1 - > 200 OK
如果我自己调用$ .ajax或者使用jquery.form的ajaxForm()并不重要。
有什么想法吗?
答案 0 :(得分:1)
301/302/303重定向由浏览器的XmlHttpRequest处理程序完成,而不是由jQuery完成。这并不能解释为什么你没有成功的回调。但它可以解释为什么重定向在ajax方面没有得到很好的测试。
一个问题是某些浏览器确实遵循302,例如不是301或303重定向。在旧的应用程序中,我们使用303 see-other响应代码并在错误处理程序中处理它。这很好,因为我们可以做新的GET请求而不是浏览器(这些都是错误的,应该已经完成了)。
但我们遇到了问题,取决于浏览器(我认为,不确定)。
当我看到302响应行为时,我认为你应该做我们已经做过的事情:在ajax请求的后处理后删除重定向。在响应中发送您想要的最终HTML(可能是服务器端重定向),还是构建您自己的协议(基于JSON?),您可以在json密钥中发送协议状态,也可以使用新的url来检查对于另一个密钥等的新响应