jQueryとRails2.2でJSONPを実現するには
GETリクエストでid値に続けて疑似拡張子を指定すると、それに対応した出力処理を切り替えられる。
GET /foos/1 GET /foos/1.xml GET /foos/1.js
jsonpに対応させるには、@foo.to_jsonの値を括弧で囲み、リクエストパラメータに指定されたcallbackの値をそれに前置きした値をrenderする。
class FoosController < ApplicationController def show @foo = Foo.find(params[:id]) callback = params[:callback] respond_to do |format| format.js { render :text => callback + "(" + @foo.to_json+ ")" } format.html # show.html.erb format.xml { render :xml => @foo } end end
呼び出し側のjQueryは以下の通り。
function foo_jsonp() { var id = $("#q").attr("value"); jQuery.getJSON( "http://localhost:3000/foos/" + id + ".js?callback=?", function(json){ }); }