我有一个简单的表格:
= 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。
答案 0 :(得分:9)
这是因为当jquery_ujs
中存在预编译资产时,您的网页在开发模式下加载/public/assets
次代码两次。
在开发模式下,javascript requries会加载单独的标记:jquery
,jquery_ujs.js
,myscripts.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
。
答案 1 :(得分:5)
类似的事情发生在我将应用程序从Rails 3.0升级到3.1时,这是我的错误。在你的
app/assets/javascripts/application.js
检查你是不是两次调用铁路助手,我有麻烦使用
//= require_tree .
我删除了这个,然后离开了
//= require jquery
//= require jquery_ujs
//= require myscripts
我也删除了app/assets/javascripts/rails.js
,该文件是由jquery-rails gem生成的,但不再需要了
答案 2 :(得分:0)
对我来说,问题是
config.assets.debug = true
选项。