【问题标题】:Why is Rails UJS ajax:success bind being called twice?为什么 Rails UJS ajax:success bind 被调用两次?
【发布时间】:2011-08-29 02:47:13
【问题描述】:

我有一个简单的表格:

= form_for(posts_path, :id => "new_post", :remote => true) do
  = text_field_tag "post[input]"
  = submit_tag "Post!"

我已将回调绑定到ajax:success 事件:

$("form#new_post").bind("ajax:success", function(xhr, data, status){
  alert("Post Created!");
});

当我点击Post! 按钮时,Post Created 出现两次。为什么?

我正在使用 Rails 3.1,默认情况下使用 jquery-ujs。

【问题讨论】:

    标签: ajax ruby-on-rails-3.1 ujs


    【解决方案1】:

    这是因为当/public/assets 中存在预编译资产时,您的页面在开发模式下加载了两次jquery_ujs 代码。

    在开发模式下,javascript 请求加载了单独的标签:jqueryjquery_ujs.jsmyscripts.js,最后是applications.js。当预编译的application.js 存在并从/public/assets 使用时会出现问题 - 它包含所有以前文件的编译。这是由assets:precompile rake 任务触发的。

    解决方案是在开发时删除/public/assets 目录,然后使用不包含以前文件的application.js(来自/app/assets/javascript)。 一般不使用assets:precompile rake 任务进行开发。

    更新

    config.serve_static_assets = false 添加到development.rb 也为我解决了问题,而无需担心/public/assets

    【讨论】:

      【解决方案2】:

      类似的事情发生在我将应用程序从 Rails 3.0 升级到 3.1 时,这是我的错误。在你的

      app/assets/javascripts/application.js
      

      检查您是否没有调用两次 rails 助手,我在使用时遇到了麻烦

      //= require_tree .
      

      我已经删除了这个并离开了

      //= require jquery
      //= require jquery_ujs
      //= require myscripts
      

      我也删除了app/assets/javascripts/rails.js,该文件是由 jquery-rails gem 生成的,但这不再需要

      【讨论】:

      • 我有同样的问题,我的 javascript 资产没有被包含两次。 ajax:success 仍然被调用两次,即使没有激活 require_tree 指令。
      • 谢谢。我有同样的问题。删除 require_tree 有助于解决问题。
      【解决方案3】:

      对我来说,问题是

      config.assets.debug = true
      

      选项。

      【讨论】:

      • 什么意思?我遇到了这个问题,并且在我的 development.rb 中也有这一行。我应该删除它吗?
      • 实际上我是通过“尝试和错误”方法找到的,因为我在 Firebug 中看到,javascript 被加载了两次,因此绑定被执行了两次(这导致了冗余的 ajax 调用)。无论如何,我怀疑这是因为我在本地预编译了资产(因为部署到 heroku)并结合了 debug = true。无论如何,当我设置 config.assets.debug = false 时,它不再包含两次。
      • 感谢您的回复。事实证明,我的问题也是脚本加载了两次。我在 dom 元素周围移动,这导致我的脚本重新运行。我通过在 window.onload 事件触发后运行脚本来修复它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 2021-07-13
      • 2021-11-25
      • 2015-12-24
      • 2012-12-10
      相关资源
      最近更新 更多