自作 Web API でデータを JSONP で返す場合
GET メソッドや POST メソッドで callback 関数をサーバー側で引き取り、JSON を引数に受け取る関数名を出力する必要があることがわかった。
自分でやってみないとわからないことばかりだ。
http://www.example.com/webapi?id=1&callback=mycallback という GET メソッドで WEB API を呼び出したら、例えば、PHP とかならば、
// ユーザーに返すJSON データを作成 $json = arrayToJson(array(...)); // 引数の値を確認なしでローカル変数に代入 // $_GET['callback'] が意図している値かどうかは確認する必要がある $callback = $_GET['callback']; header(...); header(...); header(...); printf('%s(%s);', $callback, $json); function arrayToJson(resultArray) { ... return $json; }
のようにユーザーに返す必要がある。
理由は、callback 関数(上記でいえば、callback=mycallback)の箇所を、jQuery などが自動生成して内部処理をしているからだ。
いちから Ajax の処理を記述するのならば、JSONP の関数名はハードコーティングをしてしまってもいいのかもしれない。