我有一个运行Rails 2.3.5的应用程序,其中大部分都有一个JSON API。
一个承包商进来做了一些应用程序的工作,并在几个地方使用了RJS。对于主网站使用RJS的一些控制器操作也需要是API的一部分。
问题是JSON API请求触发RJS响应,这不是我想要的。我希望RJS响应发生在浏览器上,但是当它是一个API请求时(通过使用"application/json“Accept和Content-Type头来区分),那么我希望它只发送API响应。
据我所知,Rails会为任何涉及javascript的MIME类型触发RJS响应。
text/javascript应用程序/json
等。
有没有办法强制RJS只响应text/javascript?或者有没有更好的方法来解决这个问题?
为了更清楚,我的代码看起来像这样:
def show
@dashboard = @user.dashboard
respond_to do |wants|
wants.html
wants.json { render :json => @dashboard }
end
end
问题是,在这个控制器的视图文件夹中也有一个show.rjs模板。当有人点击API时,我希望它呈现json结果,正如我在上面列出的,但它呈现的是show.rjs模板。
如何确保API客户端获得我想要的json结果,同时仍然让RJS模板在网站上为人们呈现?
发布于 2010-03-03 15:12:40
您将需要在mime_types.rb中定义json,然后您应该能够执行以下操作:
def show
@dashboard = @user.dashboard
respond_to do |format|
format.html
format.json {render :json => @dashboard}
format.js
end
end
更多信息请点击此处:http://ryanbigg.com/2009/04/how-rails-works-2-mime-types-respond_to/
发布于 2010-02-26 20:29:31
在控制器的操作中,尝试执行以下操作:
def index
respond_to do |format|
format.html # Renders index.html.erb as usual
format.xml { render :json => {:name => "raskchanky"}.to_json }
end
end
根据Rails文档(http://api.rubyonrails.org/classes/ActionController/Base.html),"render :json“将响应的内容类型设置为application/json。
发布于 2010-06-30 17:18:24
你确定你的javascript发送了正确的报头吗?当我做rjs时,我通常是通过响应format.js来实现的。这使得我可以很容易地将json和js响应分开。
通常,我的问题在于确保我的ajax操作实际以正确的格式发送请求。如果有疑问,可以在请求中添加'format':'js‘参数。在jQuery中:
// try to get it to figure out rjs actions by itself
$('a').click(function(e){
e.preventDefault();
$.get({
url: this.attr('href'),
dataType: 'script',
success: responseFunction
});
});
// or force the format
$('a').click(function(e){
e.preventDefault();
$.get({
url: this.attr('href'),
data: {format: 'js'},
success: responseFunction
});
});
https://stackoverflow.com/questions/2343605
复制相似问题