我使用的是Rails 3.2.12和最新的jquery-mobile gem。
在布局中:
<%= javascript_include_tag "mobile" %>
在mobile.js中:
//= require jquery
//= require jquery_ujs
//= require jquery.mobile
现在每当我通过输入完整的URL手动加载页面时,一切似乎都应该正常工作。但是,当我点击链接或提交表单时,会发生奇怪的“双重提交”。
以下是登录时服务器控制台的示例:
提交登录表单
Started POST "/login/signin?class=form" for 127.0.0.1 at 2014-02-10 11:21:58 +0100
Processing by LoginController#signin as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"0LlkpMMR8/4HMgzlWob15TSxvNvCIPUaW0Zuutygos8=", "email"=>"director@demo.foot", "password"=>"[FILTERED]", "connect"=>"Sign in", "class"=>"form"}
处理登录后,请求被重定向到home / myome,因为它应该
Started GET "/home/myhome" for 127.0.0.1 at 2014-02-10 11:21:58 +0100
Processing by HomeController#myhome as HTML
现在这是奇怪的事情发生的时候,因为GET方法无处不在
Started GET "/login/signin?class=form" for 127.0.0.1 at 2014-02-10 11:22:00 +0100
Processing by LoginController#signin as */*
其次是:
Started GET "/home" for 127.0.0.1 at 2014-02-10 11:22:00 +0100
Processing by HomeController#index as */*
类似地,点击简单链接会触发两个相同的GET请求。
当我使用ajaxEnabled = false
禁用ajax时,链接正在运行。
一种解释可能是两次以某种方式包括jquery,但我无法弄清楚何时以及如何。我见过几个类似的线程,如this one,并确保不在开发模式下预编译资产,但无济于事。
修改 不久之前,当我意识到所有的id,整个网站的页面都需要是唯一的才能使用jquery mobile的Ajax加载能力时,我放弃了这一点。这就是我的问题所在。
由于我将jquery mobile应用于现有的大型网站,包含大量表单和手动设置ID,我现在选择保持简单并禁用Ajax。
从头开始构建,必须提供一个良好的系统来确保整个站点中的唯一ID。
以下是有关此主题的一些建议的链接:http://metaskills.net/2011/08/24/jquery-mobile-and-rails/