Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

なんでJSONPか

チラシの裏程度ですけども。


なんでJSONPってものが生まれたのか考えてみました。(※1)と(※2)と(※3)が肝の部分です。




サーバから非同期で情報を取ってくる手段として、Ajaxではサンドボックス*1が効いていて美味しくない。



<script>タグなら、クロスドメインでもJavaScriptを呼び出せるよ!



でも、<script>タグだとonLoadされたときにしかリクエスト飛ばない・・・



動的にaddChild()で<script>タグを吐けばいいね!(※1)



ところで、JSONを<script>タグで取り込んでも、変数とかに入れないと利用出来ないじゃん?



しかも、<script>タグで取り込むだけだと、データ取り込みの完了を知ることができないじゃんか



<script>タグでinclude完了後に、ハンドラが呼ばれてそこにデータが飛んでくれば全て解決。



JSONhandler_name(); でくくったものを返せば、include完了直後にhandler_name()が呼ばれるから、これでいいね!(※2)



でも、ハンドラ名はなんて名前にする??



ハンドラ名固定じゃ使いにくいよね・・・。



サーバがハンドラ名決めれないなら、利用者(ブラウザ)にハンドラ名を決めさせればいい。



ブラウザからのリクエストで、?callback=my_handler ってあったら、my_handler( { JSON } ); って文字列を返せばいいね!(※3)

*1:JavaScriptと同一のドメインにしか接続に行けない