0

好吧,這裏是我的設置,我想我已經正確設置了所有內容,但出於某種原因頁面沒有顯示AJAX響應。Rails 3 AJAX問題 - UJS

基本上我有一個成員列表,並希望顯示他們的「個人資料」與ajax在同一頁面上。

在視圖/構件/ index.html.erb

<table> 
<tr> 
    <th>Name</th> 
</tr> 

<% @members.each do |member| %> 
    <tr> 
    <td><%= member.name %> &amp; <%= member.sname %></td> 
    <td><%= link_to 'Show', member, :remote => true %></td> 
    <td><%= link_to 'Edit', edit_member_path(member) %></td> 
    <td><%= link_to 'Destroy', member, :confirm => 'Are you sure?', :method => :delete %> </td> 
    </tr> 
<% end %> 
</table> 

<%= link_to 'New Member', new_member_path %> 

<div id="memberprofile"> 

</div> 

在我的成員控制器我有這樣的:

def show 
    @member = Member.find(params[:id]) 

    respond_to do |format| 
    format.html # show.html.erb 
    format.js 
    format.xml { render :xml => @member } 
end 
end 

然後在我_show.js.rjs我有這個

page.replace_html('memberprofile', render(@member)) 

然後在我的_member.html.erb部分我有這個:

<h1><%= @member.name %></h1> 

幾個問題:

1)從它說:「繪製的成員/ show.html.erb」控制檯,但我認爲它只是使該成員部分。爲什麼是這樣?

2)當ajax調用熄滅時,index.html.erb頁面中沒有任何事情發生。我以爲具有DIV鉤加上javascript文件會做的伎倆......

謝謝你們

+1

嘗試將'_show.js.rjs'重命名爲'show.js.rjs',它看起來像你的'format.js'呈現默認'show.html.erb' – 2011-06-13 06:48:54

+0

是的。謝謝:) – Msencenb 2011-06-13 06:52:45

回答

0

你必須創建一個新的部分,只有顯示器部件的輪廓。比方說,部分名稱爲您的索引文件_member.html.erb 做:

<%= javascript_include_tag "jquery-1.4.4.min.js", "jquery.form" %> 
<script type="text/javascript"> var $j = jQuery.noConflict();</script> 

<table> 
<tr> 
    <th>Name</th> 
</tr> 

<% @members.each do |member| %> 
    <tr> 
    <td><%= member.name %> &amp; <%= member.sname %></td> 
    <td><%= link_to 'Show', "javascript:", :onclick => "show_member(member.id)" %></td> 
    <td><%= link_to 'Edit', edit_member_path(member) %></td> 
    <td><%= link_to 'Destroy', member, :confirm => 'Are you sure?', :method => :delete %> </td> 
    </tr> 
<% end %> 
</table> 

<%= link_to 'New Member', new_member_path %> 

<div id="memberprofile"> 

</div> 


<script type="text/javascript"> 
    function show_member(m_id) { 
    var container = $j("#memberprofile"); 
     $j.ajax({ 
      url: '/members/get_member?mid=' + m_id, type: 'get', dataType: 'html', 
      processData: false, 
      success: function(data) { 
       container.html(data); 
      } 
     }); 
} 
</script> 

在你的路由做這樣的事情:

resources :members do 
    collection do 
    get :get_member 
    end 
end 
在你的控制器

信息:

def get_member 
    @member = Member.find_by_id(params[:mid]) 

    render :partial => "member", :layout => false, :locals => {:member => @member} 
end 

in _member.html.erb部分

<% unless @member.blank? %> 
    <h1><%= @member.name %></h1> 
<% else %> 
    Record not found :(
<% end %> 
+0

這種方式雖然不錯,但它在分離文件中的javascript會更好(參見[unobtrusive javascript](http://en.wikipedia.org/wiki/Unobtrusive_JavaScript))。一個很好的教程,它應該如何實現Rails 3 [在這裏](http://www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-in-rails-3/?utm_source=feedburner&utm_medium=feed&utm_campaign= simonecarletti%2Fen) – 2011-06-22 01:48:56