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