チラシの裏程度ですけども。
なんでJSONPってものが生まれたのか考えてみました。(※1)と(※2)と(※3)が肝の部分です。
サーバから非同期で情報を取ってくる手段として、Ajaxではサンドボックス*1が効いていて美味しくない。
↓
<script>タグなら、クロスドメインでもJavaScriptを呼び出せるよ!
↓
でも、<script>タグだとonLoadされたときにしかリクエスト飛ばない・・・
↓
動的にaddChild()で<script>タグを吐けばいいね!(※1)
↓
ところで、JSONを<script>タグで取り込んでも、変数とかに入れないと利用出来ないじゃん?
↓
しかも、<script>タグで取り込むだけだと、データ取り込みの完了を知ることができないじゃんか
↓
<script>タグでinclude完了後に、ハンドラが呼ばれてそこにデータが飛んでくれば全て解決。
↓
JSONを handler_name();
でくくったものを返せば、include完了直後にhandler_name()が呼ばれるから、これでいいね!(※2)
↓
でも、ハンドラ名はなんて名前にする??
↓
ハンドラ名固定じゃ使いにくいよね・・・。
↓
サーバがハンドラ名決めれないなら、利用者(ブラウザ)にハンドラ名を決めさせればいい。
↓
ブラウザからのリクエストで、?callback=my_handler
ってあったら、my_handler( { JSON } );
って文字列を返せばいいね!(※3)
*1:JavaScriptと同一のドメインにしか接続に行けない