Rails:由于某些原因,JS控制器被称为两次

时间:2011-07-12 03:29:58

标签: javascript jquery ruby-on-rails ruby ajax

出于某种原因,当我点击一个按钮时,我的控制器和生成的jquery函数被调用两次。由于调用的js函数是切换,这是一个问题,因为它会导致代码跳入和跳出视图。

以下是表格:

Unseen Notifications: <%=  current_user.notification_unseen %> </div>
                <%= button_to "show", {:action => "seen", :controller=>"notifications"}, :remote => true %>

这是控制器:

def seen
    respond_to do |format|
      format.js 
    end
  end

这是jquery:

$("div#notifications").toggle();
$("div#count").html("<%= escape_javascript( render :partial => 'notifications/count')%>");

我为什么在地球上可能会发生这种情况感到茫然。我一直非常小心,不要双击,不知道如何防止它。任何建议都会有很大的意义。

5 个答案:

答案 0 :(得分:15)

我之前遇到过这样的问题,当时我有2个jquery库。特别是,检查您是否只有jquery_ujs.js而不是jquery.js。好像当你同时包含它们时,某些js函数会被调用两次。

希望这有帮助!

答案 1 :(得分:5)

如果本杰明的建议不起作用,你可以使用作弊和黑客,并在每次点击时添加1到一些全局变量(这将发生两次),然后使用模数仅触发你的动作(global_counter%2 == 0)。

为了清楚起见,这是一个可怕的解决方案,你应该尽可能避免使用......

答案 2 :(得分:2)

我是rails的新手并遇到了同样的问题。事实证明我有:

<%= javascript_include_tag "application" %>

在我的视图和application.html.erb中。我删除了其中一个,瞧,固定。

答案 3 :(得分:0)

以jquery_ujs.js为我工作。

仔细查看文件 application.html.erb ,看看是否指的是jquery.js和jquery_ujs.js。如果是这样,只需取出jquery_ujs.js,刷新浏览器并再次尝试。

另外,请查看页面源代码,看看是否同时引用了jquery_ujs和jquery。如果是这样,请在源文件中搜索对该jquery_ujs的引用。

为我工作,谢谢你们。

答案 4 :(得分:0)

如果您在Rails 5.1及更高版本中运行jquery,则由于Rails放弃了对jquery的支持并切换到其自己的ujs,您需要从application.js文件中删除// = require rails-ujs。

在运行最新版本的rails时我遇到了同样的问题,这解决了我的问题。