【问题标题】:Does Active Model Serializers work with JSONP?活动模型序列化程序是否与 JSONP 一起使用?
【发布时间】:2014-02-18 17:26:24
【问题描述】:

如果不是,我怎样才能使它与我的 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 来获得相同的功能。我该怎么做?

【问题讨论】:

  • 让我们看看一些代码...
  • @Severin Done... 我希望 AMS 有一个选项,我可以做类似render json: @post, jsonp: callback_function

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


【解决方案1】:

显然,在普通的 Rails 中,render 语法已经处理了回调。只需传入 callback: params[:jsoncallback] 作为选项就可以了。

单击here 并在Rendering JSON部分下浏览文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多