2014-04-04 77 views
2

使用rails和.js.erb發出AJAX請求(並將值附加到div),您如何防止呈現新佈局?換句話說,保持在同一頁沒有去任何地方,只是追加從服務器的新鮮數據在一個div。沒有重新加載相同的頁面,沒有重定向。Rails AJAX - 不重定向或渲染

目前我的控制器看起來像這樣

def update_shipping 
    @order = Order.find(params[:id]) 
    @order.shipping_option_id = params[:shipping_options] 
    @order.save! 

    respond_to do |format| 
     format.js 
     format.html 
    end 
    end 

和我的格式如zisss:

 <%= form_tag update_shipping_order_path(@order), method: :put, remote: true do %> 
      <%= select_tag 'shipping_options', @options_for_select, onchange: 'this.form.submit()' %> 
     <% end %> 

和我的路線看起來像這樣:

resources :orders do 
    member do 
    put :update_shipping 
    end 
end 

,但我得到'Template is Missing'錯誤

請幫忙!!

+2

請把你的js代碼在這裏 – RSB

+1

什麼是你的'update_shipping.html.erb'(或.js文件)是什麼樣子?控制器希望在您的操作後默認呈現此文件。理想情況下,它應該只包含要返回到AJAX函數以在當前頁面上呈現的'div'。 – KappaNossi

+0

$('#shipping_cell')。html('<%= j view_in_preferred_currency(@ order.shipping_option.price)%>'); @KappaNossi –

回答

0

試試這個: -

respond_to do |format| 
      format.js { render :nothing => true } 
      format.html 
     end 
+0

我以前試過這個..它會導致一個空白頁面呈現 –

2

您需要添加app/views/your_controller/目錄下的文件update_shipping.js.erb。請注意JavaScript文件的名稱應與操作相同。由於您的表單中有remote:true,因此導軌會嘗試在您的案例中呈現javascript模板update_shipping.js.erb

現在,在您update_shipping.js.erb寫入文件的一些基本JavaScript來更新頁面元素,比如

#update_shipping.js.erb 
$('.some-div').html(<%=j @model.some_value' %>) 
+0

我已經這樣做了。謝謝 –

0

如果你不希望呈現一個佈局,你可以使用!request.xhr?像這樣:

respond_to do |format| 
    format.html { layout: !request.xhr? } 
    format.js 
end 

如果您想讓您的ajax驅動的JS啓動,您只需要撥打與您的視圖相同的.js.erb文件即可:

#app/views/controller/update_shipping.js.erb 
alert("This JS is returned & fired after the Ajax request"); 

你最好在做這個你routes.rb太:

resources :orders do 
    put :update_shipping 
end