我正在嘗試在rails中發出ajax請求。我想要做的就是從我的javascript調用控制器中的一個動作,而不必爲它創建一個視圖頁面。例如在沒有視圖的控制器中的動作(對於AJAX)
class BooksContoller < ApplicationController
respond_to :html, :json, :xml
def myaction
respond_to do |format|
format.js { # do stuff }
end
end
end
在routes.rb中文件中添加以下
match '/books/myaction' => 'books#myaction'
這裏的Ajax調用,我做
$.ajax(
{
type: "GET", url: "/books/myaction.js",
success: function(data){
console.log(data);
}
});
Rails的抱怨沒有找到視圖
ActionView::MissingTemplate with {:locale=>[:en], :formats=>[:js, :html], :handlers=>[:erb, :builder, :coffee, :haml]}
顯然,如果我創建一個相應的myaction.html.haml文件,它很高興,一切正常。但是我不想爲這個動作創建一個視圖,因爲這隻會用於ajax請求。有沒有辦法讓ajax調用自定義操作而不創建視圖?
是因爲你迴應:json但使用.js作爲擴展名嗎? –
@ s-c你能找到解決方案嗎?我在Rails 3.2.14中遇到了完全相同的問題。我只需要一個控制器中的一個動作,它返回一個json字符串,然後傳遞給jqplot來繪製圖形。沒有涉及的意見。 我甚至嘗試使用「render:text => data,:content_type =>'application/json'」。但仍然有同樣的錯誤。 – Srinidhi
請忽略。我能夠解決我的錯誤。我正在使用CanCan進行授權/訪問控制,並且在仔細查看堆棧跟蹤之後,在cancan的AccessDenied檢查開始後,「Actionview :: MissingTemplate」被引發。如果我登錄並訪問我新創建的操作,則一切正常。我還將我的新操作添加爲CanCan的load_and_authorize_resource的異常。 – Srinidhi