ユーザ用ツール

サイト用ツール


ajax:crossdomain

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

ajax:crossdomain [2007/11/18 16:30] – 作成 - 外部編集 127.0.0.1ajax:crossdomain [2023/04/05 14:01] (現在) – 削除 nullpon
行 1: 行 1:
-====== 別ドメインのデータを非同期で取得する ====== 
-[[XMLHttpRequest]]にはドメインの異なるサイトからデータを取得できないという、クロスドメインの制限がある。 
-===== JSONPを使ってクロスドメイン制限を越える ===== 
-JSONPは、引数にJSON文字列を渡した関数呼び出しの書式で使う 
-<code javascript> 
-// JSON 
-{ fuga : "ふが?" }; 
  
-// JSONP 
-hoge({ fuga : "ふが?" }); 
-</code> 
- 
-JSONPによるクロスドメインリクエストは、SCRIPTタグのSRC属性がドメインを問わないことを利用している。まず、ドキュメントにSCRIPTタグを動的に追加し、別ドメインからJSONP形式で記述されたJavaScriptファイルを取得する。JSONPはJavaScriptの関数呼び出しの書式なので、ロード完了と同時にJavaScriptの関数として実行される。その関数をあらかじめ呼び出し元で定義しておくことで、別ドメインから得られたデータを利用することができる。 
- 
-読み込み元に、JSONP読み込み時に実行されるコールバック関数を記述。 
-<code javascript> 
-function hoge(obj) { 
-    window.alert(obj.fuga);  
-} 
-</code> 
- 
-JSONPをリクエスト、''http://otherdomain.example.com/hoge.cgi?callback=hoge''がJSONPを返すとする。DOMを操作し以下のようなscript要素をドキュメントに追加すると、Scriptファイルがダウンロードされ、hoge関数が実行される。 
-  <script src="http://otherdomain.example.com/hoge.cgi?callback=hoge" type="text/javascript"></script> 
-[[http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html|JSONscriptRequest クラス]]というライブラリを利用すると簡単に実装できる。 
- 
-JSONPスクリプトが読み込まれた瞬間、JSONPは1で定義したJavaScriptの関数として実行される 
-  hoge({ fuga : "ふが?" });  // JSONPは関数hogeとして実行され、アラートに「ふが」と表示</pre> 
- 
-GETリクエストしか使えない、XMLHttpRequestに比べるとできる事が少ない等の欠点がある。 
- 
-===== Dojoフレームワーク ===== 
-JSONPによるクロスドメイン非同期リクエストは、[[http://dojotoolkit.org/|Dojoフレームワーク]]等でサポートされている。 
- 
-<code javascript> 
-// for Dojo 0.4 
-dojo.require("dojo.io"); 
-dojo.require("dojo.io.ScriptSrcIO"); 
- 
-dojo.io.ScriptSrcTransport.bind({ 
-    url: "http://example.com/intiki_url", 
-    jsonParamName: "callback", 
-    load: function(type, data, event, kwArgs) { 
-        for (var i in data) {dojo.debug(i + " = " + data[i])}; 
-    } 
-}); 
-</code> 
ajax/crossdomain.1195403452.txt.gz · 最終更新: 2007/11/18 16:30 by 127.0.0.1