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 的 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 回答