ajaxというかaja?

既存のajaxライブラリを使った場合、フレームワークと相性が悪い。
フレームワークを使うと実際の処理しているPHPファイルが隠蔽されるけれどajaxライブラリの方でそういう使い方をする場合を想定してないっぽい。


なので検索するも適当なライブラリが見つからず。
JSONもコマンドひとつで簡単にインストールできるならやるんだが・・。


ってことでテキストでやり取りすることに。
これだと例えばViewクラスでエスケープ処理なんかを施したテキストを渡してやればいい。



具体的には

<script type="text/javascript">
function ajax(id){
    // 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;
                    document.getElementById("text").innerHTML = text;
                }
            }
        } catch(e){
            // エラー時には何もしない
        }
    }

    // httpリクエストを発行
    if (xmlhttp.readyState>0) xmlhttp.abort();
    xmlhttp.open("GET", "?action=Ajax&id="+id, true);
    xmlhttp.send();
}
</script>

こんな感じ。
あとはフレームワークの方でAjaxクラスを作ってidによって処理を振り分ける。
そしてテンプレートを使って表示してもいいし、面倒ならそのままechoしてもいい。
htmlの方でキーが押されたときとかのイベントでajax()を呼び出す。


なんか色々騒がれて色々なライブラリが出てるけど、テキストを表示させるだけならかなり簡単だった。
ユーザ登録画面なんかで”そのユーザIDは存在しています”エラーなんかを表示させる場合にはこれくらいのソースで十分だと思う。
ユーザ登録やメールアドレスチェックなどで先にajaエラーチェックしておいてエラーならreturn false;で次の画面に進まないようにすると良さげ。