redirect_to后没有调用javascript

时间:2014-12-14 13:50:44

标签: javascript jquery html ruby-on-rails

问题

我的javascript在redirect_to之后没有被调用。这是预期的吗?有没有办法让它被调用?

控制器

# file: app/controllers/widgets_controller.rb
class WidgetsController < ApplicationController

  # GET /widgets
  def index
    @widgets = Widget.order(:id)
  end

  # GET /widgets/refresh_all
  def refresh_all
    @widgets = Widget.order(:id)
    @widgets.refresh_all
    redirect_to :widgets
  end

end

视图

/app/views/widgets/index.html.erb

<p>Widgets are <%= @widgets.any_refreshing? ? "" : "not" %> being refreshed.</p>
<script type="text/JavaScript">
  $( window ).load(function() {
      console.log( "...C" );
  });
  $( document ).ready(function() {
      console.log( "...B" );
  });
  console.log("...A" );
</script>

我观察到的

当我通过GET /小部件访问页面时,javascript被触发,我看到&#34; ... A \ n ... B \ n ... C \ n&#34;在控制台上。当我通过GET / widgets / refresh_all访问页面时,页面被正确呈现(&#34;小部件正在刷新&#34;),但javascript中没有任何内容被调用。

这可能是因为我在我的控制器中做了redirect_to :widgets吗?

我错过了什么?

2 个答案:

答案 0 :(得分:1)

不完全确定发生了什么,但有类似的东西。

你的js在dom完成加载之前正在加载并运行。一旦dom加载,请尝试调用js。尝试 jquery或类似的$(document).ready

刷新时,dom和资产会被缓存,因此js会在正确的时间运行。

答案 1 :(得分:0)

事实证明,Turbolinks因为我不完全理解的原因而在重定向后禁止调用javascript。 FWIW,它也抑制了元刷新。 (也许专家可能会为什么...... ...)

无论如何,修复是添加

<body data-no-turbolink="true">
  ...
</body>

要禁用Turbolinks的页面。有关详细信息,请参阅https://stackoverflow.com/a/22327275/558639