2011-11-03 143 views
1

我正在使用Ruby on Rails 3.1.1和jquery-rails 1.0.16 gem。我在使用:remote => true表單時遇到問題。使用AJAX表格時遇到問題

在我看來,文件我有:

<%= 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值的副本。

P.S.我:我試圖使用不同的瀏覽器並清除緩存,但問題仍然存在。

P.S. 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命令有關......可能是那個?


UPDATE II

我有關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 

如果我在public/assets/目錄中運行以下命令

$ 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 

它創建這些文件

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> 
+0

您的'app/assets/javascripts'文件夾中是否還有'jquery-ujs.js'文件? –

+0

@Dylan Markow - 我更新了問題。如果問題依賴於'require jquery_ujs'行,你能否給我一個確認? – user12882

回答

1

之前Rails 3.1,你可以通過手動添加rails.js到你的public/javascripts文件夾來包含jQuery-ujs。

使用Rails 3.1,現在您的Gemfile中有一條gem 'jquery-rails'行,並且app/assets/javascripts/application.js文件中有一條require jquery_ujs行;沒有必要手動添加rails.js文件,因爲它已經與寶石捆綁在一起。

如果您將非3.1應用程序升級到3.1,您可能仍然有rails.js左右,所以UJS的東西正在運行兩次。而不是從application.js文件中刪除require行,而應該刪除rails.js文件。 (您也可能還有實際的jQuery JS文件;同樣的事情,它會自動包含在jquery-rails寶石中,您可以刪除它)。

UPDATE

我才意識到你是預編譯你的資產。你不想在開發模式下這樣做,因爲當你請求/assets/application.js它可能會提供/public/assets/application.js,其中包括其中的所有其他JS文件。要修復,請清除public/assets文件夾,並僅在生產環境中預編譯您的資產。 (請參閱Rails 3.1 remote requests submitting twice

+0

我已經完成搜索,但沒有提到的文件都在我的應用程序的目錄中。我還用更多的信息更新了這個問題。 – user12882

+0

如果我檢查了HTML代碼,我可以看到我*沒有重複您在答案中提到的任何「核心」文件(有關更多信息,請參閱更新問題的最後一部分)。 – user12882

+0

剛剛更新了我的答案,它很可能與開發模式下的預編譯資產有關。 –