【JavaScript】 MooTools:Json.Remoteを使ってみる

2007.09.05 Author: たわばがに

前回に引き続き、MooTools のお話です。
今回は、Json.Remote オブジェクトを使ってみます。

JSON とは、JavaScript Object Notation の略称で、 データ交換フォーマットの一つです。
名前からして、JavaScript専用であるかのように感じますが、
あくまでデータフォーマットなので、当然、他の言語でも使用できます。

データの簡単な例は↓です。

(例)
{"名前":"たわばがに", "職業":"へっぽこエンジニア", "好きな動物":"ネコ"}

当然ですが、階層構造にすることも可能です。

(例)
{
 "たわばがに" : {
  "職業" : "へっぽこエンジニア",
  "好きな動物" : "ネコ"
 },
 "あべしえび" : {
  "職業" : "へたれデザイナー",
  "好きな動物" : "イヌ"
 }
}


Json.Remote オブジェクトを用いると、サーバサイドのスクリプトと JSON 形式のデータを
簡単にやりとりすることができます。

いつものごとく、簡単なサンプルを作成してみました。

HTML、サーバサイドのPHPスクリプト、共に文字コードはUTF8で記述します。
まずHTMLは以下の通り。

<html>
<head>
<script type="text/javascript" src="mootools_v1_11.js"></script>
<script type="text/javascript">
<!--
function test() {
    // 取得
    var jSonRequest 
           = new Json.Remote(
                   "data.php",
                   {onComplete: 
                        function(data) {
                            document.getElementById("A").innerHTML = data.A;
                            document.getElementById("B").innerHTML = data.B;
                            document.getElementById("C").innerHTML = data.C;
                        }
                   }).send({'name': 'hoge'});
}
//-->
</script>
</head>
<body onLoad="test()">
<div id="A">Aデータ</div>
<div id="B">Bデータ</div>
<div id="C">Cデータ</div>
</body>
</html>
続いてサーバサイドのPHPスクリプト。
PHP5.2.0以上であれば、デフォルトで組み込まれている php-json を使えばよいですが、
それ以前のバージョンの場合、導入も簡単な PEAR::Services_JSON あたりを使うのがオススメです。
今回は PEAR::Services_JSON を使用しています。
<?php

require_once('JSON.php');

$json = new Services_JSON();

$data = $json->decode($_POST['json']);

if ($data->name == 'hoge') {
    $obj = array('A'=>'あ','B'=>'い','C'=>'う');
} else {
    $obj = array('A'=>'abon1','B'=>'abon2','C'=>'abon3');
}

// 出力
echo $json->encode($obj);

この2つのファイルと、Json.Remote オブジェクトを含んだ MooTools の本体を
サーバに設置します。(全て同じディレクトリ内に設置)
PHPスクリプトを見れば、何を行っているのかおおよそ見当はつくかと思います。
HTML側から送信された JSON 形式のデータ「name」が「hoge」であるかないかで、
出力する JSON 形式のデータを切り替えます。
今回のスクリプトの場合は「name」が「hoge」なので、上側のデータが出力されます。

今回の肝としては、HTML側の以下の部分。
    var jSonRequest 
           = new Json.Remote(
                   "data.php",
                   {onComplete: 
                        function(data) {
                            document.getElementById("A").innerHTML = data.A;
                            document.getElementById("B").innerHTML = data.B;
                            document.getElementById("C").innerHTML = data.C;
                        }
                   }).send({'name': 'hoge'});
この部分でサーバサイドスクリプトと JSON 形式データのやりとりを行っています。
'data.php'がデータを送受信するURL、onComplete: はサーバサイドスクリプトからのデータを受け取った時点で行う処理(関数)を指定します。
なお、無名関数に渡されている data には、サーバサイドから受け取った JSON 形式のデータが格納されています。
故に、data.A には「あ」、data.B には「い」、data.C には「う」が格納されます。

とりあえず、ここまで理解できれば、前回同様に簡単な Ajax アプリが作れそうですね。
やりとりするデータ項目が多かったり、複雑だったりする場合、
こちらの方が圧倒的に使い勝手がいいような気はします。

以上、偏った MooTools ネタでした。
名古屋のWebシステム開発・ネットワーク構築会社 コネクティボへ