2012-02-29 66 views
2

我剛剛在一臺新機器上安裝了一個rails 3.0.3項目,我收到了一些與form_tag:remote => true有關的奇怪行爲。它看起來在請求中設置了錯誤的Accept頭,所以它不會作爲AJAX/JS請求出現,而是出現在HTML請求中。在我的生產服務器的Accept頭設置正確:Rails 3.0 form_tag瓦特/遠程不正確接受:標題

Accept:*/*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript 

規格:

ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-linux] 
Rails 3.0.3 

然而,在新機器上我設置了它看起來像這樣:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

規格:

ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux] 
Rails 3.0.3 

這是生成表單(內部_request.html.erb)代碼

<div id='request-translation'> 
    <h2 class="tr-req left"><%= t('user.translation_requests.request') %></h2> 
    <%= form_tag(request_translation_artist_song_path(@artist, @song), 
      :method => :post, 
      :remote => true, 
      :class => 'left', 
      :style => 'margin-left: 20px;') %> 
    <%= languages_combobox_large(@into_languages, 'language_id').html_safe %> 
    </form> 
</div> 

當然在我的控制器我只format.js響應和,但請求進來作爲format.html。我想:遠程=>真正照顧這一點。該表單生成的HTML看起來一樣好:

<form accept-charset="UTF-8" action="/xxx/request_translation" class="left" data-remote="true" format="js" method="post" style="margin-left: 20px"> 
+1

您是否在您的HTML標頭中包含了jquery.js和jquery_ujs.js? – iltempo 2012-02-29 06:20:33

+0

jquery_ujs.js失蹤:)。它不在生產服務器上使用 - 我猜這和rails.js是一樣的嗎? – lyricat 2012-03-02 07:30:55

+0

對。我從中得出了答案。 – iltempo 2012-03-02 07:49:35

回答

1

請確保您包括的jquery.js以及* jquery_ujs.js *在你的HTML頭。

jquery_ujs負責發送經由AJAX已設定的數據遠程屬性的形式。因爲它是不顯眼的表單將沒有那麼好。但它通過普通的頁面請求發送。