Rails - 重定向后的turbolinks问题

时间:2017-10-20 10:57:25

标签: javascript ruby-on-rails ajax turbolinks

我将登录表单更改为" remote:true"后,我有一些奇怪的行为。 之前,在登录成功之后,我将redirect_to发送到另一个页面,该页面在正文中执行Javascript。

<script>
writeCookie();
</script>

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

#= require write_time_zone_cookie

writeCookie()按预期工作,但在我将登录表单更改为&#34; remote:true&#34;我在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();
        });

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

由于 亚历

2 个答案:

答案 0 :(得分:0)

./yourProgram | ffmpeg -y -f rawvideo -pixel_format bgr24 -video_size 1024x768 -i - -c:v h264 -pix_fmt yuv420p video.mp4

表示未在js文件中定义Uncaught ReferenceError: writeCookie is not defined

要证明这只是在function writeCookie() {}标记中包含以下函数

<script>

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

原因是你可能在你的html文档中运行该脚本,当文档被加载时,可能在此之前资产管道加载你的文件<script> function writeCookie() { // Your function code hear } writeCookie(); </script> write_time_zone_cookie,其中包括{{1}功能。

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

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

enter image description here

答案 1 :(得分:0)

最终完全删除了turbolink(Guide how to do it)。在页面重新加载和双控制器动作执行后,我看到了更多的JS问题。它有助于&#34;保留日志&#34;在控制台:)。我之后遇到的唯一问题是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