2013-10-19 29 views
1

我一直在從Rails 2.3.14遷移到Rails 3.0.20,我不知道爲什麼我不能讓Ajax調用通過link_to with:remote => true。Rails 3.0的遷移link_to:remote => true Ajax + JQuery的ujs不工作

的Gemfile

gem "jquery-rails", "~> 1.0.19" 

命令行:

rails generate jquery:install --ui 
     remove public/javascripts/prototype.js 
     remove public/javascripts/effects.js 
     remove public/javascripts/dragdrop.js 
     remove public/javascripts/controls.js 
    copying jQuery (1.7.1) 
    identical public/javascripts/jquery.js 
    identical public/javascripts/jquery.min.js 
    copying jQuery UI (1.8.16) 
    identical public/javascripts/jquery-ui.js 
    identical public/javascripts/jquery-ui.min.js 
    copying jQuery UJS adapter (822920) 
     remove public/javascripts/rails.js 
    identical public/javascripts/jquery_ujs.js 

在頭:

<%= csrf_meta_tag %> 
    <%= javascript_include_tag :defaults %> 

這就造成:

<meta name="csrf-token" content="qH17FbbfwQNFTHWte&#47;CBYopzfEvf5gnHxGEUdDBfV+Y="/> 
    <script src="/javascripts/jquery.js?1381981377" type="text/javascript"></script> 
    <script src="/javascripts/jquery-ui.js?1381981377" type="text/javascript"></script> 
    <script src="/javascripts/jquery_ujs.js?1381981377" type="text/javascript"></script> 
    <script src="/javascripts/application.js?1381984319" type="text/javascript"></script> 

鏈接標記,它不會工作:

<%= link_to image_tag("review-icon2_16x16.png", :border=>0), 
         {:controller=>"sponjson", :action=>"review", :id=>"#{sponsor.id}"}, 
         {:remote=>true, :id=>"review_spon_id_#{sponsor.id}", :alt=>"Flag for Review", :title=>"Flag for Review", :confirm => "Review ... Are you sure?" } 
         %><br/> 

編輯。添加鏈接標籤擴展HTML:

<a href="/sponjson/review/77" alt="Flag for Review" data-confirm="Review .. Are you sure?" data-remote="true" id="review_spon_id_77" title="Flag for Review"><img alt="Review-icon2_16x16" border="0" src="/images/review-icon2_16x16.png?1338407096" /></a> 

,配套UJS:

<%= raw("<script type='text/javascript'> 
       $('#review_spon_id_#{sponsor.id}').bind('ajax:before', function(evt, status, data, xhr) { 
        beforeAjaxStatus('sstatus_#{sponsor.id}') 
       }); 
       $('#review_spon_id_#{sponsor.id}').bind('ajax:complete', function(evt, status, data, xhr) { 
        completeAjaxStatusReview('sstatus_#{sponsor.id}') 
       }); 
     </script>")%> 

問題是:當我點擊鏈接,它不是一個AJAX請求。調用控制器的只是這種反應罰款:

respond_to do |format| 
     format.html { (head :ok) } 
     format.js { (head :ok) } 
     format.xml { (head :ok) } 
    end 

編輯:有路線:

/sponjson/review/:id(.:format) {:controller=>"sponsors", :action=>"review"}  
/sponjson/:id(.:format) {:controller=>"sponsors", :action=>"update"} 
/:controller(/:action(/:id))(.:format) 

回答

0

的問題是,我錯過了「數據類型」 =>「JSON」。這使得控制器能夠將其作爲json調用(具有適當的內容類型)進行檢測並因此作出相應響應:

<%= link_to image_tag("review-icon2_16x16.png", :border=>0), 
         {:controller=>"sponjson", :action=>"review", :id=>"#{sponsor.id}"}, 
         {:remote=>true, "data-type"=>"json", :id=>"review_spon_id_#{sponsor.id}", :alt=>"Flag for Review", :title=>"Flag for Review", :confirm => "Review ... Are you sure?" } 
         %><br/> 
0

它看起來像你附加你的JS事件數據-ID而不是鏈接的ID。您還在圖像上設置了一個邊框,該邊框不受支持(支持的參數列表爲here)。

試着改變你的鏈接如下:

<%= link_to review_sponjson(sponsor), remote: true, confirm: "Are you sure?", id: "review_spon_id_#{sponsor.id}" do %> 
    <%= image_tag("review-icon2_16x16.png", alt: "Flag for Review") %> 
<% end %> 
+0

這並沒有正常工作。確認:語法是一個問題,所以我改變了'確認:'你確定嗎?''..但是然後得到的HTML是: Flag for Review
RubesMN

+0

你能澄清如何將事件附加到鏈接的ID而不是數據-ID?不知道我能說出區別。 link_to呈現(我原來的版本)到:Review-icon2_16x16
RubesMN

+0

你可以運行'耙路線'和更新您的問題真正快?指定控制器,操作和id有點不好,可能不需要。 –