Active Model Serializers是否与JSONP一起使用?

时间:2014-02-18 17:26:25

标签: ruby-on-rails ruby-on-rails-4 active-model-serializers

如果没有,我怎样才能使它与我的AJAX请求符合JSONP?

编辑:看起来我不清楚我想要实现的目标。比方说,我有一个包含id,作者,标签和内容等属性的Post类。现在,我将使用以下ActiveModel :: Serializer来编写JSON响应:

class PostSerializer < ActiveModel::Serializer
  attributes :id, :author, :tags, :content,
end

现在在控制器中,我会做类似

的事情
render :json => @post

生成一个看起来像这样的JSON文件

{
  "posts": [
    {
      "id": 1,
      "author": "John Doe",
      "tags": "test",
      "content": "Hello world"
    }
  ]
}

现在我的目标是使用JSONP,这样当有人在请求中传入jsoncallback参数时(例如GET'/ posts?jsoncallback = callback_function'),我就可以生成以下内容:

callback_function({
  "posts": [
    {
      "id": 1,
      "author": "John Doe",
      "tags": "test",
      "content": "Hello world"
    }
  ]
})

目前我在Post对象上使用to_json并将结果存储到名为@posts_json的变量中,然后在控制器中将Content-Type指定为text / javascript,并呈现出如下所示的html.erb文件:

<% if params[:jsoncallback].blank? %>
<%= @posts_json.html_safe %>
<% else %>
<%= params[:jsoncallback] %>(<%= @posts_json.html_safe %>)
<% end %>

我相信你会同意这个解决方案真的很难看,问题是由于我在控制器中使用的to_json方法,它开始给我带来问题。

因此,我想使用ActiveModel :: Serializer来获得相同的功能。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

显然在普通的Rails中,render语法已经处理了回调。简单地传递回调:params [:jsoncallback]作为一个选项可以解决问题。

点击here,然后在渲染JSON 部分下浏览文档。