prototype.js:Ajax
●Ajax.Request
Ajax は、
より使いやすい WEB にするための必須アイテムといっていいでしょう。
# Ajax そのものの説明は省略します。
が、
Ajax の使い方は、ブラウザによって様々で、
何かとコーディングが面倒です。
prototype.js の Ajax.Request を使えば、面倒さが軽減されます。
最低限、以下のコードがあれば動作します。
<script type="text/javascript">
<!--
// 通信したいときに、subFunc を呼ぶ
function subFunc() {
new Ajax.Request("targetURL", {
// 必要なオプションがあれば書く
// mtype: 通信方式 ('get', 'post' など。デフォルトは post。省略可)
// postBody : mtype が post の場合に送信するデータ (省略可)
// asynchronous: 非同期通信するか (true または false。デフォルトは true。省略可)
onSuccess:function(response) {
// 通信に成功したときに呼ばれる
// response.responseText にサーバーから来たデータが入っている
},
onFailure:function(response) {
// 通信に失敗したときに呼ばれる
}
});
}
// -->
</script>
簡単な実例を挙げます。
以下に示す ajax.php、ajax.html と、
prototype.js 本体ファイルを、
c:\Apache24\htdocs 直下に置きます。
ブラウザで、ajax.html を開きます。
ボタンを押すと、
"testtest100: return from the server"
とポップアップが出れば OK です。
・ajax.php
<?php
// Ajax.Request から呼ばれる。
// 実運用では、
// ここでデータベースにアクセスするなど、
// 普通の PHP コードが使える。
// 画面表示した内容そのままが Ajax の結果として帰る。
print_r($_GET["getParam"].$_POST["postParam"].": return from the server");
?>
・ajax.html:
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
<!--
function subFunc() {
new Ajax.Request("ajax.php?getParam=testtest", {
postBody: "postParam=100",
onSuccess:function(response) {
// 通信に成功したときに呼ばれる。
// 厳密には、response.status が 200 な事を確認すべし。
alert(response.responseText);
},
onFailure:function(response) {
// 通信に失敗したときに呼ばれる
alert("ERROR!!");
}
});
}
// -->
</script>
</head>
<body>
<input type="button" value="ボタン" onClick="subFunc()">
</body>
</html>
さらに言うと、
PHP からの結果が文字列1つなら上記でいいのですが、
配列など、複数のデータを渡したい場合は、
JSON を使うといいでしょう。
・渡したいデータを JSON 形式で print_r する。
上記の例だと、
print_r($_GET["getParam"].$_POST["postParam"].": return from the server");
の部分を、
$ret=array($_GET["getParam"].$_POST["postParam"]=>"return from the server");
print_r(json_encode($ret));
などとします。
# json_encode は、PHP 5.2.0 以上で使えます。
・Ajax のほうで、改めて JSON をオブジェクトに変換して使う。
上記の例だと、
alert(response.responseText);
の部分を、
var ret=response.responseText.evalJSON();
alert(ret['testtest100']);
などとします。