jQueryを使ってjsonpでやりとりする

クライアント側のソース。今回のjQueryは1.3.1を利用しています。

$.ajax({
  url: ‘http://hogehoge.com/api/,
  dataType: ‘jsonp’,
  success: function(data)
  {
    成功時のコールバック関数
  }
});

hogehoge.com/api/に目的のAPIが置いてある前提です。そこにアクセスします。で、サーバ側のアクセスログを観ていると、実際にアクセスしてくるURIは

http://hogehoge.com/api/?callback=jsonp1235002429334&_=1235002440850

となっています。jQueryが付与しているんですかね。これは、結果は「jsonp1235002429334」というコールバック関数に渡してね、という意味合いのようです。クライアント側でコールバック関数の名前を指定していないのにちゃんと成功時のコールバック関数が呼ばれるのは、jQueryがこっそりと処理してくれていたからのようです。

で、サーバ側のレスポンスは

jsonp1235002429334({“address”:”東京都足立区大谷田”});

でOK。これは例として、郵便番号を投げると該当住所を返すapiです。値はクライアント側コールバック関数のdataに格納されます。住所にアクセスしたい場合は

data.address

で「東京都足立区大谷田」が返ってきます。jsonpを利用することでクロスドメインが可能になります。これで郵便番号から住所に変換、メールアドレスの正規表現チェック、等々の共通処理は一元管理できます。マスタが一箇所で済むのはメンテナンスも楽になります。

ただ、インターネット上に公開されているので、どこからアクセスがあるかわかりません。ホストで絞る、等の制限は必要かもしれませんね。