5

我有一个简单的表格:

= 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会出现两次。为什么?

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

4

3 回答 3

9

这是因为jquery_ujs当预编译资产存在于/public/assets.

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

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

更新

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

于 2011-10-21T19:41:15.520 回答
5

我将应用程序从 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 生成的,但这不再是必需的

于 2011-09-05T05:21:34.243 回答
0

对我来说,问题是

config.assets.debug = true

选项。

于 2012-09-18T18:06:43.810 回答