Comments
Description
Transcript
Ajaxの仕組み
Ajaxの仕組み ■ 4.JSONP ■ 1.XMLHttpRequest 普通のajaxは別ドメインでは参照出来ない。しかし、 scriptタグでの外部スクリプト参照は別ドメインも参照 可能。 ajaxによる通信はXMLHttpRequest オブジェクトを使用す る。 ◎XMLHttpRequestのメソッド open("GET" , URL , 非同期かどうか) send(null) 通信準備 送信 ◎XMLHttpRequestのプロパティ responseText サーバからの応答(テキスト) responseXML サーバからの応答(XML) readyState 現在の通信状態(4のとき完了) status サーバからの応答状態(200なら成功) onreadystatechange 非同期通信時、呼び出される関数 ※注意 XMLHttpRequestは同一ドメイン間の通信しかできない 別のドメイン(クロスドメイン)は不可。 ■ 2.同期通信 単純な例として同期通信を行う。 1.XMLHttpRequestを生成 2.open で URL を指定(同一ドメイン内のみ) 3.send を行う 4.responseText または responseXML に結果が入る。 同期通信の例: var req = new XMLHttpRequest(); req.open("GET", "http://localhost/test.txt", false); req.send(null); document.write(req.responseText); ■ 3.非同期通信 同期通信では通信が終了するまで他の処理・操作が行えな い。それを避けるには非同期通信を行う。 open を行う際の第三引数を true にすると非同期通信に なる。非同期通信では、通信完了時の処理を行うために、 onreadystatechangeに呼び出される関数を指定する。 非同期通信の例: var req = new XMLHttpRequest(); req.onreadystatechange = check; req.open("GET", "http://localhost/test.txt", true); req.send(null); function check() { if( req.readyState == 4 && req.status == 200 ){ document.write(req.responseText); } } <script type="text/javascript" src="http://localhost/jsonp.php"></script> そこで、scriptタグでXML/JSONを呼び出し、そこに関数名 を渡して呼び出せば、クロスドメインが実現できる。 ●外部スクリプトからのデータ受け渡しの例 1.scriptタグでの外部スクリプトで指定したファイルで 以下を記述。 num = 10; 参照元ではnumを表示する。これにより、外部から内部の 変数に値を設定することが可能なことが分かる。 2.次に関数testを作成し、外部スクリプトで以下を試す。 test(10); 参照元では関数testを定義しておく。 function test(num){ document.write(num); } これにより、外部ファイルから参照元の関数を呼び出し、 値を渡すことが可能なことが分かる。 3.外部スクリプトをphpで作成し、echo でJavaScriptを 表示してみる。 echo 'test(10)'; これも同じ結果になることがわかる。 4.phpにパラメータとして関数名 test を渡し、それを 呼び出してもらうようにする。 <script type="text/javascript" src="http://localhost/jsonp.php?callback=test"> </script> 5.最後にphpで関数呼び出し時、JSON文字列を渡すよう にしてみる。参照元文字列を受け取った後、JSON.parseで オブジェクトに変換する。