【问题标题】:Rails: JS Controller Being Called Twice for Some ReasonRails:由于某种原因,JS 控制器被调用了两次
【发布时间】:2026-01-10 21:50:01
【问题描述】:

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

这是表格:

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')%>");

我不知道为什么会发生这种情况。我一直非常小心不要双击,也不知道如何防止它。任何建议将不胜感激。

【问题讨论】:

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


    【解决方案1】:

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

    希望这会有所帮助!

    【讨论】:

    • 我支持这个议案。引用了多个库时,我也遇到了同样的情况。
    • 上帝保佑你本杰明,绝对救了我一天左右
    • 我明白你的意思。但是当我删除其中任何一个时,ajax / jquery 都会停止工作
    【解决方案2】:

    如果本杰明的建议不起作用,您可以使用作弊和技巧,并在每次点击时为某个全局变量加 1(这会发生两次),然后使用模数仅在 (global_counter % 2 == 0).

    需要明确的是,这是一个糟糕的解决方案,您应该尽可能避免使用......

    【讨论】:

      【解决方案3】:

      我是 Rails 新手,遇到了同样的问题。原来我有:

      &lt;%= javascript_include_tag "application" %&gt;

      在我的观点和 application.html.erb 中。我删除了其中一个,瞧,修复了。

      【讨论】:

        【解决方案4】:

        使用 jquery_ujs.js 对我有用。

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

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

        为我工作,谢谢大家。

        【讨论】:

          【解决方案5】:

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

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

          【讨论】: