正確に何を知りたいですか?ActiveRecordには、レコードをJSONにシリアル化するメソッドがあります。たとえば、Railsコンソールを開いて入力するModelName.all.to_json
と、JSON出力が表示されます。基本的に、正しいヘッダーを使用して結果をrender :json
呼び出してブラウザに返します。to_json
これは、使用するJavaScriptオブジェクトを返すJavaScriptでのAJAX呼び出しに役立ちます。さらに、このオプションを使用して、callback
JSONPを介して呼び出したいコールバックの名前を指定できます。
たとえば、User
次のようなモデルがあるとします。{name: 'Max', email:' m@m.com'}
次のようなコントローラーもあります。
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user
end
end
ここで、次のようにjQueryを使用してAJAX呼び出しを行う場合:
$.ajax({
type: "GET",
url: "/users/5",
dataType: "json",
success: function(data){
alert(data.name) // Will alert Max
}
});
ご覧のとおり、RailsアプリからID 5のユーザーを取得し、JSONオブジェクトとして返されたため、JavaScriptコードで使用することができました。コールバックオプションは、JSONオブジェクトを最初で唯一の引数として渡されたnamedのJavaScript関数を呼び出すだけです。
callback
オプションの例を示すために、以下を見てください。
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user, callback: "testFunction"
end
end
これで、次のようにJSONPリクエストを作成できます。
function testFunction(data) {
alert(data.name); // Will alert Max
};
var script = document.createElement("script");
script.src = "/users/5";
document.getElementsByTagName("head")[0].appendChild(script);
このようなコールバックを使用する動機は、通常、クロスオリジンリソースシェアリング(CORS)を制限するブラウザー保護を回避することです。ただし、JSONPは、より安全で簡単なCORSを回避するための他の手法が存在するため、あまり使用されていません。