【问题标题】:Redirecting main window from ajax call从ajax调用重定向主窗口
【发布时间】:2011-10-27 21:46:43
【问题描述】:

我有一个对检查身份验证的控制器的 ajax 调用,当不存在身份验证时,它将调用继续发送到登录控制器,该控制器检查它是否是 xhr 请求。如果是,它将包含 page.redirect_to 的 rjs 呈现到登录路径,并且主窗口被重定向到登录页面。这在谷歌浏览器中完美运行,但在 Firefox 中失败。

rjs文件中唯一的代码是:

page.redirect_to("http://localhost:3000/signin")

正如我所说,它在 chrome 中完美运行,但 Firefox(v3.6) 拒绝重定向主窗口。有没有人知道我如何让它在 Firefox 中也能正常工作?

【问题讨论】:

标签: javascript ruby-on-rails ajax redirect rjs


【解决方案1】:

控制台是否出现任何错误?

响应“js”并使用类似以下内容渲染一个 js 模板会不会更容易:

window.location = "http://localhost:3000/signin"

有点切题,你真的应该绝对重定向到“localhost:3000”吗?也许有不同的解决方案?

【讨论】:

  • 我在开发时仅使用该 url 作为占位符,但由于 page.redirect_to 生成 window.location.href 我不认为使用这种方法会有很大的不同。
  • 恐怕我也没有在控制台中发现任何错误。
【解决方案2】:

您可能需要处理来自 ajax 请求的响应并通过 JavaScript 重定向:

window.location = urlToDirectTo;

我认为大多数浏览器会重定向 ajax 请求本身,而不是发出 ajax 请求的页面。 Here's an answer 到一个类似的问题,详细说明了解决方案。

【讨论】:

  • page.redirect_to 生成 javascript 神 window.location.href 所以我不相信它会有很大的不同。奇怪的是我什至无法收到警报('你好');现身。我不认为 Firefox 让 javascript 到达主窗口。
  • 我似乎得到一个 304 表示一个空响应?这似乎很奇怪。但也许它只是重定向 ajax 框架而没有返回主窗口?
  • 304 表示“未修改”。这意味着它正在缓存......您可能想看看您的请求/响应标头。您可以在 Firefox 的 Firebug 中查看它们。
  • 我终于设法解决了:问题基本上是我在执行 javascript 重定向之前重定向了一次。 Firefox 显然不喜欢这种额外的重定向,而 webkit 浏览器似乎并不介意。将 javascript window.location 1 在链中向上移动解决了该问题。 (所以基本上 javascript 在应用程序控制器的 auth 方法中调用,而不是重定向到我之前调用它的登录)感谢所有输入!
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多