ふとjsonpを使おうと思ったんだけど たぶんぼくのドキュメント読解力が足りないせいで無駄に時間かかった。
忘れないようにメモ。

$.ajax({
    type: "GET",
    url: "http://sample.com/",
    data: {
      "param": "hogehoge",
    },
    dataType: "jsonp",
    jsonp: "callBack",
    success: function(data) {
      /* success */
    },
    complete: function(data) {
      /* complete */
    }
});

dataTypeをjsonpにするとjQueryがcallbackパラメータを自動で入れてくれる。

callback=jsonp1234391216435みたいな。

jsonpオプションを付けると↑のcallbackの部分を指定した名前にできる。
サーバ側のAPIによってcallbackのパラメータ名が決められている場合があるのでそういうときに使う。


callback関数を指定したければdataオプションに書く。

data: { "callback" : "hoge" }

callback関数を指定しないとjQuery内部で以下のコードが実行される。
window[ 'jsonp1242391216435' ] = function(tmp){
  data = tmp;
  success();
  complete();
  // ガベージコレクト処理
  window[ jsonp ] = undefined;
  try{ delete window[ jsonp ]; } catch(e){}
  if ( head )
  head.removeChild( script );
}


サーバ側はこんなのでとりあえずデータ返してみた。
返すデータはお好きに。
<?php
$data = array("a" => "hoge", "b" => "foo", "c" => "bar");
$json = json_encode($data);
$callback = htmlspecialchars(strip_tags($_GET["callback"]));
echo $callback . "(" . $json . ")";
?>