2007年12月13日
jQuery で JSONP 2通り
jQuery を使って JSONP でリクエストする方法を2通り紹介するよ。
その1: $("<script>")
document.createElement() を $() を使って実現する。
$("<script>")
.attr('type', 'text/javascript')
.attr('src', "http://www.example.com/jsonp.cgi?param1=value1&callback=myCallback")
.appendTo($("head"));
function myCallback(json){
// ロード完了時にここが呼ばれる
}
http://www.example.com/jsonp.cgi?param1=value1&callback=myCallback にリクエストがいく。
callback のところは、サービスによって指定の仕方が違うかもね。
その2: $.ajax
$.ajax の dataType で jsonp が使える。
$.ajax({
url : "http://www.example.com/jsonp.cgi",
dataType : "jsonp",
data : {
param1 : "value1"
},
success : function(json){
// ロード完了時にここが呼ばれる
},
error : function(){
alert('error');
}
});
こっちの方がシンプルに書ける。コールバック用の関数は jQuery が自動的に生成して、結果に応じて success や error を呼び出してくれる。
API によってはコールバックを指定するためのパラメータが callback ではなくて、別の名前の場合がある。このときは jsonp パラメータを指定する。
$.ajax({
url : "http://www.example.com/jsonp.cgi",
dataType : "jsonp",
data : {
param1 : "value1"
},
jsonp : "jsoncallback", // ← !!!これ!!!
success : function(json){
// ロード完了時にここが呼ばれる
},
error : function(){
alert('error');
}
});
裏側では、http://www.example.com/jsonp.cgi?jsoncallback=jsonp1197507452843&_=1197507453671¶m1=value1 という URL にリクエストが行く。jsonp1197507452843 というのが jQuery が動的に生成するコールバック関数。呼び終わったら、ちゃんと自分自身を undefined にしているので、グローバル名前空間を汚すのも一瞬で済むようだ。