えらく久しぶりになってしまったなぁ。
JSONPを勉強して、DSでAjaxっぽい通信ができないものかと考えていたのですが、JSONPの解説された本というのはないらしくWeb上の記事で何とかするしかなかった。しかしどれを見てもピンと来ませんでした。
TAGGYのサンプルが一番役に立った気がします。とりあえず打ち込む前に印刷して読んでいたら何となく雰囲気はつかめました。が、別のことをやっていてかなり放置していました。今日実際に打ち込んで改変してみたら動作はあっさり分かりました。やっぱりサンプルがあるといいですね。以下自分の作ってみたもの。
クライアント
<script type="text/javascript"> function jsonptest(data){ alert(data.p); } function test() { scriptTag = document.createElement("script"); scriptTag.type = "text/javascript"; scriptTag.src = "./jsonp.php?p=1&id=123"; document.getElementById('abc').appendChild(scriptTag); } </script> <input type="button" value="実行" onclick="test()"> <div id="abc"> </div>
サーバ
<?php $p = htmlspecialchars($_GET['p']); $id = htmlspecialchars($_GET['id']); echo <<<JSONP jsonptest({ "p" : "$p", "id" : "$id" }); JSONP; ?>
こんなんでいいのかな?と思いながら動かしたんですが普通にOKでした。これでPHPでの処理を加えればデータの送信もできそう。まだローカルで実験しただけですが、サーバ間通信もできると思います。多分。
・・・本当はこれすんなり動いたわけではなくて、まずTAGGYのサンプルを見ずに作って、これで大丈夫だろう!というのが動かず、TAGGYにサンプルあったなぁというのを思い出し、それをコピーしてみて動作を確認して、それを改変したら動きました。しかし、元のサンプルを見ずに作ったものがマネしようと何しようとどうやっても動かず、「何が問題なんだーーー!!」と思っていたら、
「script」が「srcipt」になってました。
ああ、何という時間の無駄。