3

我有一个广泛使用 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 OK

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

POST localhost:3000/resources -> 302 找到

获取 localhost:3000/resources/1 -> 200 OK

我自己调用 $.ajax 还是使用 jquery.form 的 ajaxForm() 都没关系。

有任何想法吗?

4

1 回答 1

1

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

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

但是我们遇到了问题,具体取决于浏览器(我认为,不确定)。

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

于 2011-01-07T23:57:10.263 回答