3

Railsでajaxリクエストを作成しようとしています。私がやりたいことは、ビューページを作成せずに、JavaScript からコントローラーのアクションを呼び出すことです。例えば

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 呼び出しを行う方法はありますか?

4

2 に答える 2

0

あなたはただrender :json => {:example => :object}最後に置く必要があります。例えば:

def myaction
  respond_to do |format|
    format.js do
      # do stuff
      render :json => {:result => :of_stuff}
    end
  end
end

もちろん、これをAJAXリクエストにのみ使用することがわかっている場合は、respond_toを完全にスキップできます(これにより、URIの有無にかかわらず呼び出すことができます.js)。

def myaction
  render :json => {:result => :of_stuff}
end
于 2012-10-10T23:24:36.787 に答える
0

あなたはrespond_to:htmlを持っています、そして私の賭けはあなたのjavascriptが "Accept:application/json"を設定していないということです。クラスレベルとメソッドの両方からrespond_toを削除します。

于 2012-10-10T23:57:28.907 に答える