フレームワークでAjaxもどき
/** * 非同期リクエストの送信 * * @param string requestType GETかPOSTの文字列 * @param string requestPath リクエストPATH * @param string func リクエスト結果取得時に実行する関数 * @param mixed args リクエスト結果取得時に実行する関数の第二引数 * @param string postData POST時送信データ(日本語や記号はencodeURIComponent()を使用すること) */ function doAja(requestType, requestPath, func, args, postData){ if (requestType != "GET" && requestType != "POST"){ alert("doAja error: 第一引数["+requestType+"]がGETまたはPOSTではありません"); return false; } // XMLHttpRequestを生成 var xmlhttp = this.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); // サーバからレスポンスがあったときの関数 xmlhttp.onreadystatechange = function(){ //try { if (xmlhttp.readyState == 4){ if (xmlhttp.status == 200){ // サーバから文字列を受け取る var text = xmlhttp.responseText; if (func){ // コールバック関数が定義されている場合は呼び出し func(text, args); } } } //} catch(e){ // エラー時の処理はアプリごとに決めてちょうだい // alert(e); //} } // httpリクエストを発行 if (xmlhttp.readyState>0) xmlhttp.abort(); xmlhttp.open(requestType, requestPath, true); // データを送信 if (requestType == "GET"){ xmlhttp.send(null); }else if (requestType == "POST"){ xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlhttp.send(postData); } }
こんな感じの関数を用意する。
そしてコールバック関数を作る。
/** * メニューの書き換えコールバック関数 * * @param string text 非同期通信から返ってくる文字列 * @param null args 引数によって処理を振り分けたい場合などに使う汎用変数 */ function rewriteMenu(text, args){ var menu = document.getElementById('menu'); menu.innerHTML = text; }
利用するコードは
doAja('GET', '/MenuView', rewriteMenu, null, null);
こんな感じ。
これならどんなフレームワークでも使えるし、書き換え部分のみをブラウザで表示させることもできる。
XMLをごりごり使う必要がないページでは今のところこれでやっていこうかと。