|
  
AjaxでXMLHTTPや、Ajax.Updater、Ajax.Requestを使う |
|
Sec.0 まずは通信用の関数を用意します。 // HTTP通信用、共通関数 function createXMLHttpRequest(cbFunc) { var XMLhttpObject = null; try{ //以下の処理により、ブラウザを意識せずに済みます。 XMLhttpObject = new XMLHttpRequest(); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ return null; } } } if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc; return XMLhttpObject; } xmlhttp.jsという名前で保存しましょう。
Sec.1 非同期でデータを取得する
【サンプル】 <html> <head> <meta http-equiv="content-type" content="text/html;charset=shift_jis"> <title>非同期でデータを取得する</title> //①Sec.0で作ったファイルをincludeします <script type="text/javascript" src="xmlhttp.js"></script> <script type="text/javascript"><!-- ② ①でインクルードした通信用の関数を使います function getFile(fName) { httpObj = createXMLHttpRequest(readComplete); // if (httpObj) { httpObj.open("GET",fName,true);//③非同期通信をしない場合はfalseにします httpObj.send(null); } } function readComplete() { //④通信に成功しファイルの読み込みが完了した時の処理を書きます if ((httpObj.readyState == 4) && (httpObj.status == 200)) { $("result").innerHTML = httpObj.responseText;//⑤サーバから取得したデータを格納します }else{ //⑥読み込み中は Loading... と表示させます。 $("result").innerHTML = "<b>Loading...</b>"; } } // --> </script> </head> <body> <h1>サーバー上のファイルを読み込む</h1> <form name="ajaxForm"> <input type="button" onClick="getFile('file.html')"><br> </form> <div id="result"></div> //⑦結果を表示させるための箱を用意します </body> </html> どうですか?簡単でしょ? とりあえず細かな事は置いといて流れを理解しましょう。
Sec.2 非同期でデータを取得する(Prototype.jsを使う)
【サンプル】 まずはここでPrototype.jsをダウンロードしましょう <html> <head> <meta http-equiv="content-type" content="text/html;charset=shift_jis"> <title>サーバー上のHTMLファイルを読み込む</title> <script type="text/javascript" src="prototype.js"></script> //①Prototype.jsをincludeします <script type="text/javascript"><!-- function getFile(fName) { //②パラメータは他にも指定できますが、ここでは最低限のものを使います。 new Ajax.Request(fName, { method: 'get', onSuccess: readComplete, //③読み込みに成功した時はreadComplete関数を呼び出します onFailure:readError //④読み込みに失敗した時の処理です }); } function readComplete() { $("result").innerHTML = httpObj.responseText; //⑤取得した内容を編集します } function readError() { $("result").innerHTML = "通信に失敗しました";} // --> </script> </head> <body> <h1>非同期でデータを取得する(Prototype.jsを使う)</h1> <form name="ajaxForm"> <input type="button" value="file.htmlファイルを読み込み" onClick="getFile('file.html')"><br> </form> <div id="result"></div> //⑥結果を表示させるための箱を用意します </body> </html>
Sec.3 UPDATERを使う(Prototype.jsを使う)
【サンプル】 <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>prototype.jsサンプル</title> <script src="prototype.js" type="text/javascript"></script>//①prototype.jsをインクルードします <script type="text/javascript"><!-- function readText() { var URL = "file.html?cache="+(new Date()).getTime(); new Ajax.Updater("result",URL, { method: "get" }); } // --></script> </head> <body> <h1>UPDATERでデータを取得する(Prototype.jsを使う)</h1> <form method="get" name="ajaxForm" onsubmit="readText();return false;"> <input type="submit" value="file.htmlを読み込み"><br> </form> <div id="result"></div> </body> </html>
どうでしょうか?これで処理の流れはつかんでいただけたと思います。Sec1、Sec2はサーバーから
取得したデータを加工する場合に使います。フォーマット済みのファイルを読み込む場合はSec3が いいでしょう。Sec1、Sec2が理解できれば次の章へ進みましょう。次の章ではXMLファイルを扱います。 Point1: 取得したデータを加工する場合はSec1、Sec2を使う Point2: フォーマット済みのデータはSec3を使う |