JSONP
JSONPは、クロスドメインの問題を気にせずにJSONデータを送信する方法です。
JSONPはXMLHttpRequest
オブジェクトを使用しません。
JSONPでは<script>
代わりにタグが使用されます。
JSONPの概要
JSONPは、JSON with Paddingの略です。
クロスドメインポリシーにより、別のドメインからファイルを要求すると、問題が発生する可能性があります。
別のドメインから外部スクリプトをリクエストする場合には、この問題は発生しません。
JSONPはこの利点を利用し、XMLHttpRequest
オブジェクトの代わりにscriptタグを使用してファイルを要求します。
サーバーファイル
サーバー上のファイルは、結果を関数呼び出し内にラップします。
結果は、JSONデータをパラメーターとして使用した「myFunc」という名前の関数への呼び出しを返します。
関数がクライアントに存在することを確認してください。
JavaScript関数
「myFunc」という名前の関数がクライアントにあり、JSONデータを処理する準備ができています。
動的スクリプトタグの作成
上記の例では、スクリプトタグを配置した場所に基づいて、ページの読み込み時に"myFunc"関数が実行されますが、これはあまり満足のいくものではありません。
scriptタグは、必要な場合にのみ作成する必要があります。
例
ボタンがクリックされたときに<script>タグを作成して挿入します。
動的JSONP結果
上記の例はまだ非常に静的です。
JSONをphpファイルに送信して例を動的にし、phpファイルが取得した情報に基づいてJSONオブジェクトを返すようにします。
PHPファイル
PHPファイルの説明:
- PHP関数
json_decode()
を使用して、リクエストをオブジェクトに変換します。 - データベースにアクセスし、配列に要求されたデータを入力します。
- 配列をオブジェクトに追加します。
json_encode()
関数を使用して配列をJSONに変換します。- 戻りオブジェクトを「myFunc()」で囲みます。
JavaScriptの例
「myFunc」関数は、phpファイルから呼び出されます。
コールバック関数
サーバーファイルを制御できない場合、サーバーファイルに正しい関数を呼び出すにはどうすればよいでしょうか。
場合によっては、サーバーファイルがパラメーターとしてコールバック関数を提供します。
例
PHPファイルは、コールバックパラメータとして渡した関数を呼び出します。
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。