0

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

4

1 回答 1

1

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

单击此处并在“渲染 JSON ”部分下浏览文档。

于 2014-02-19T02:25:30.613 回答