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 · 最終更新: 2007/11/18 16:30 by 127.0.0.1