首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何覆盖Rails 2.3中的RJS MIME类型?

如何覆盖Rails 2.3中的RJS MIME类型?
EN

Stack Overflow用户
提问于 2010-02-27 01:43:39
回答 3查看 692关注 0票数 1

我有一个运行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?或者有没有更好的方法来解决这个问题?

为了更清楚,我的代码看起来像这样:

代码语言: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模板在网站上为人们呈现?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-03 23:12:40

您将需要在mime_types.rb中定义json,然后您应该能够执行以下操作:

代码语言:javascript
运行
复制
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/

票数 1
EN

Stack Overflow用户

发布于 2010-02-27 04:29:31

在控制器的操作中,尝试执行以下操作:

代码语言:javascript
运行
复制
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。

票数 0
EN

Stack Overflow用户

发布于 2010-07-01 01:18:24

你确定你的javascript发送了正确的报头吗?当我做rjs时,我通常是通过响应format.js来实现的。这使得我可以很容易地将json和js响应分开。

通常,我的问题在于确保我的ajax操作实际以正确的格式发送请求。如果有疑问,可以在请求中添加'format':'js‘参数。在jQuery中:

代码语言:javascript
运行
复制
// 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
  });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2343605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档