フレームワークで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をごりごり使う必要がないページでは今のところこれでやっていこうかと。