【问题标题】:Rails - turbolinks issue after redirectRails - 重定向后的turbolinks问题
【发布时间】:2017-10-20 10:57:25
【问题描述】:

将登录表单更改为“remote: true”后,我出现了一些奇怪的行为。 之前,在登录成功后,我做了一个重定向到另一个页面,该页面在正文中执行 Javascript。

<script>
writeCookie();
</script>

Javascript 是通过视图特定的咖啡文件加载的

#= require write_time_zone_cookie

writeCookie() 按预期工作,但是在我将登录表单更改为“remote: true”后,我在 redirect_to 之后收到 JS 错误。

Uncaught ReferenceError: writeCookie is not defined
    at HTMLDocument.<anonymous> (<anonymous>:4:11)
    at HTMLDocument.dispatch (jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:5227)
    at HTMLDocument.elemData.handle (jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:4879)
    at Object.t.dispatch (turbolinks.self-1d1fddf91adc38ac2045c51f0a3e05ca97d07d24d15a4dcbf705009106489e69.js?body=1:6)
    at r.t.Controller.r.notifyApplicationAfterPageLoad (turbolinks.self-1d1fddf91adc38ac2045c51f0a3e05ca97d07d24d15a4dcbf705009106489e69.js?body=1:7)
    at r.t.Controller.r.visitCompleted (turbolinks.self-1d1fddf91adc38ac2045c51f0a3e05ca97d07d24d15a4dcbf705009106489e69.js?body=1:7)
    at r.t.Visit.r.complete (turbolinks.self-1d1fddf91adc38ac2045c51f0a3e05ca97d07d24d15a4dcbf705009106489e69.js?body=1:6)
    at r.<anonymous> (turbolinks.self-1d1fddf91adc38ac2045c51f0a3e05ca97d07d24d15a4dcbf705009106489e69.js?body=1:6)
    at turbolinks.self-1d1fddf91adc38ac2045c51f0a3e05ca97d07d24d15a4dcbf705009106489e69.js?body=1:6

我已经尝试了一些来自网络的建议,例如:

$(document).on('turbolinks:load', function() {
          writeCookie();
        });

但这并不能解决我的问题。 有人有想法吗?

谢谢 亚历克斯

【问题讨论】:

  • 你能发布你的整个 javascript 清单文件 (application.js) 吗?
  • @PatrickO'Grady //= 需要 turbolinks //= 需要 read_url_params

标签: javascript ruby-on-rails ajax turbolinks


【解决方案1】:
Uncaught ReferenceError: writeCookie is not defined

表示你的js文件中没有定义function writeCookie() {}

为了证明这一点,只需在您的 &lt;script&gt; 标签中包含以下函数

<script>
   function writeCookie() {
      // Your function code hear
   }
   writeCookie();
</script>

如果这解决了您的问题,我是对的。您没有该功能,因此问题与您的资产管道有关。

原因可能是您在 html 文档中运行该脚本,当文档加载时,可能在此之前资产管道会加载您的文件 write_time_zone_cookieread_url_params,其中包括 writeCookie() 函数。

所有文件都需要包含在您的资产管道中,因此当您运行 writeCookie() 函数时,如果您的文件已加载到资产管道中,请检查您的浏览器开发人员工具。只需设置一个断点。

我可以为您提供更多帮助,但请给我们更多信息,您提供给我们的信息有限,无法真正为您提供更多帮助

【讨论】:

    【解决方案2】:

    最终完全删除了 turbolinks (Guide how to do it)。在页面重新加载和双重控制器操作执行后,我看到了更多的 JS 问题。它有助于在控制台中“保留日志”:)。之后我面临的唯一问题是 AJAX 调用的重定向。我通过向我的 ApplicationController 添加一个辅助方法来解决:

    def redirect_by_request_type(url)
        if request.xhr?
          render js: "window.location='#{url}'"
        else
          redirect_to url, status: 303, turbolinks: false
        end
      end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多