如果没有,我怎样才能使它与我的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来获得相同的功能。我怎么能这样做?
答案 0 :(得分:1)
显然在普通的Rails中,render
语法已经处理了回调。简单地传递回调:params [:jsoncallback]作为一个选项可以解决问题。
点击here,然后在渲染JSON 部分下浏览文档。