使用AJAX表单的麻烦
Trouble on using AJAX forms
我使用Ruby on Rails 3.1.1和jquery-rails 1.0.16 gem。我对使用:remote => true
的表单有一个问题。
在我的视图文件中,我有:
<%= form_for(@user, :url => user_path(@user), :remote => true) do |f| %>
...
<%= f.submit "Update" %>
<% end %>
当我单击Update
按钮并检查Firebug控制台时,我看到执行了两个AJAX HTTP请求,而不是应该执行的一个。同样的问题发生在我的应用程序中使用:remote => true
的所有表单。
有什么问题吗?如何解决这个问题?
注意:如果我检查DOM似乎在当前页面我没有重复的HTML'CSS id
值。
注:I:我尝试使用不同的浏览器并清除它们的缓存,但问题仍然发生。
注:II:问题发生在本地主机(在我的本地机器上)的开发模式下。如果它发生在远程机器的生产模式下,我还没有尝试过。
更新我
在我的application.js
文件中我有
//= require jquery
//= require jquery_ujs
//= require jquery-ui
我试图删除require jquery_ujs
行,现在它似乎工作,直到我运行bundle exec rake assets:precompile
命令并重新启动服务器。完全:如果我删除require jquery_ujs
行,我做不运行bundle
命令,它的工作和预期的一样好;但如果然后我运行bundle
命令AJAX表单提交不工作"在所有"'"不再"。
可能问题与生成指纹文件的bundle
命令有关…可能是吗?
更新二
与JavaScript文件相关的文件系统是:
app/assets/javascripts/
app/assets/javascripts/application.js
lib/assets/javascripts/
vendor/assets/javascripts/
vendor/assets/javascripts/vendor.js
vendor/assets/javascripts/jquery_plugins/plugin1.js
vendor/assets/javascripts/jquery_plugins/plugin2.js
vendor/assets/javascripts/jquery_plugins/....js
在我的app/assets/javascripts/application.js
文件中,我有:
//= require jquery
//= require jquery_ujs
//= require jquery-ui
//
//= require_tree .
//
//= require vendor
在我的vendor/assets/javascripts/vendor.js
文件中,我有:
//= require_directory ./jquery_plugins
如果我运行以下命令
$ bundle exec rake assets:precompile
/<MY_USER_PATH>/.rvm/rubies/ruby-1.9.2-p290/bin/ruby /<MY_USER_PATH>/.rvm/gems/ruby-1.9.2-p290/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
/<MY_USER_PATH>/.rvm/rubies/ruby-1.9.2-p290/bin/ruby /U<MY_USER_PATH>/.rvm/gems/ruby-1.9.2-p290/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets
在public/assets/
目录下它创建了这些文件
application-b63d5946eebe0c8d46e078ef32299fc5.js
application-b63d5946eebe0c8d46e078ef32299fc5.js.gz
application.js
application.js.gz
manifest.yml
...
如果我检查页面的HTML代码,我可以看到以下内容:
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_plugins/plugin1.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_plugins/plugin2.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_plugins/....js?body=1" type="text/javascript"></script>
<script src="/assets/vendor.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
在Rails 3.1之前,您可以通过手动将rails.js
添加到public/javascripts
文件夹来包含jQuery-ujs。
与Rails 3.1,你现在有一个gem 'jquery-rails'
行在你的Gemfile
和require jquery_ujs
行在你的app/assets/javascripts/application.js
文件;没有必要手动添加rails.js
文件,因为它已经与gem捆绑在一起了。
如果你将一个非3.1的应用升级到3.1,你可能仍然有rails.js
,所以UJS的东西会运行两次。与其从application.js
文件中删除require
行,不如直接删除rails.js
文件。(你也可能仍然有实际的jQuery JS文件坐在那里;同样的,它被jquery-rails
gem自动包含,你可以删除它)。
我刚意识到你在预编译你的资产。你不想在开发模式下这样做,因为当你请求/assets/application.js
时,它可能会提供/public/assets/application.js
,其中包括它内部的所有其他JS文件。要解决这个问题,请清除public/assets
文件夹,只在生产中预编译您的资产。(参见Rails 3.1远程请求提交两次)
- 可以't让我的if语句处理js中的html表单输入
- 如何使用WCF服务和javascript表单post上传.doc文件
- Javascript生成的表单未提交
- 如何使用javascript或html下载PDF格式的填写表单
- HTML表单提交时未执行外部函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- Ajax发布表单序列化,发布引号'
- 多级HTML表单
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 在验证和发送邮件后更改联系人表单的 html
- Perl / LWP 提交 JavaScript 表单的麻烦
- WordPress表单麻烦
- 使用AJAX表单的麻烦
- 麻烦提交ajax表单在yii
- 在返回键上提交表单时遇到麻烦
- 麻烦提交我的表单(与jQuery验证)到同一页面与$_POST
- Angular表单绑定到作用域的麻烦
- 麻烦添加前导零提交的表单数据在javascript
- 我有验证和表单向导的麻烦