2009年8月23日日曜日

Prototype.jsとZend_Jsonで簡単にAjax

比較的多くのデータ数を非同期通信でやりとりするときに、よく使っているスタイルを紹介します。
まずJavaScriptで
function toPHP(){
    var options = {
//<form のidはxyzだったとします。
            method:'post',
            onSuccess:getResult,
            parameters:$("xyz").serialize()
//これで、form内の全項目を一括で渡すことができます
    };
    new Ajax.Request('../lib/ajax/sample.php', options);
}

sample.phpでは
//結果はjson形式で返します
header('Content-Type: application/json; charset=UTF-8');
//jsでserialize時に自動的にurlencodeされているため
foreach($_POST as $key => $val){
    $_POST[urldecode($key)] = urldecode($val);
}
[ここでサーバ側の処理をします]
$res['abc']  = '123';
$res['def']  = '456';
     ・
     ・
//Js側に返したいデータを連想配列に登録していきます
echo Zend_Json::encode($res);
//連想配列をJson形式に変換して返します

返された値をJs側で処理するには
function getResult(httpObj){
    var Itm =  httpObj.responseJSON;
    $("abc").value = Itm.abc; 
//というアクセスもできますし配列に変換した後に処理することもできる

以上 簡単・安全にAjax通信する方法の紹介でした。

0 件のコメント:

コメントを投稿