ajax:crossdomain
差分
このページの2つのバージョン間の差分を表示します。
| ajax:crossdomain [2007/11/18 16:30] – 作成 - 外部編集 127.0.0.1 | ajax:crossdomain [2023/04/05 14:01] (現在) – 削除 nullpon | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ====== 別ドメインのデータを非同期で取得する ====== | ||
| - | [[XMLHttpRequest]]にはドメインの異なるサイトからデータを取得できないという、クロスドメインの制限がある。 | ||
| - | ===== JSONPを使ってクロスドメイン制限を越える ===== | ||
| - | JSONPは、引数にJSON文字列を渡した関数呼び出しの書式で使う | ||
| - | <code javascript> | ||
| - | // JSON | ||
| - | { fuga : " | ||
| - | // JSONP | ||
| - | hoge({ fuga : " | ||
| - | </ | ||
| - | |||
| - | JSONPによるクロスドメインリクエストは、SCRIPTタグのSRC属性がドメインを問わないことを利用している。まず、ドキュメントにSCRIPTタグを動的に追加し、別ドメインからJSONP形式で記述されたJavaScriptファイルを取得する。JSONPはJavaScriptの関数呼び出しの書式なので、ロード完了と同時にJavaScriptの関数として実行される。その関数をあらかじめ呼び出し元で定義しておくことで、別ドメインから得られたデータを利用することができる。 | ||
| - | |||
| - | 読み込み元に、JSONP読み込み時に実行されるコールバック関数を記述。 | ||
| - | <code javascript> | ||
| - | function hoge(obj) { | ||
| - | window.alert(obj.fuga); | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | JSONPをリクエスト、'' | ||
| - | <script src=" | ||
| - | [[http:// | ||
| - | |||
| - | JSONPスクリプトが読み込まれた瞬間、JSONPは1で定義したJavaScriptの関数として実行される | ||
| - | hoge({ fuga : " | ||
| - | |||
| - | GETリクエストしか使えない、XMLHttpRequestに比べるとできる事が少ない等の欠点がある。 | ||
| - | |||
| - | ===== Dojoフレームワーク ===== | ||
| - | JSONPによるクロスドメイン非同期リクエストは、[[http:// | ||
| - | |||
| - | <code javascript> | ||
| - | // for Dojo 0.4 | ||
| - | dojo.require(" | ||
| - | dojo.require(" | ||
| - | |||
| - | dojo.io.ScriptSrcTransport.bind({ | ||
| - | url: " | ||
| - | jsonParamName: | ||
| - | load: function(type, | ||
| - | for (var i in data) {dojo.debug(i + " = " + data[i])}; | ||
| - | } | ||
| - | }); | ||
| - | </ | ||
ajax/crossdomain.1195403452.txt.gz · 最終更新: by 127.0.0.1