- 2006年10月13日 15:44
- AJAX
HTML_AJAXとは、PHPよりAJAXな開発を用意にする為のツールキットだ。
HTML_AJAXを利用すると主に以下の内容が可能になる。
1.引き数を指定してPHPのクラスを直接(透過的に)呼び出せる。
2.PHPクラスのメソッドに対応したコールバッククラスを用意する事により、メソッドに対応したコールバック処理が行える。
PHPのクラスを透過的に呼び出す為には、javascript側で、プロキシとなるクラスをインスタンス化する必要がある。
「プロキシ」とは、PHPのクラスを呼び出す為のjavascript側の仲介クラスを指す。
プロキシクラスは、以下のタグを貼り付ける事によりPHP側がjavascriptで自動的に生成するので、手書きする必要がないので便利だ。
<script type="text/javascript" src="server.php?stub=test"></script>
この場合、「server.php」側に「test」クラスを読み込んで置くか、記述しておく必要があり、HTML_AJAXの核となる「HTML_AJAX_Server」のインスタンスに、インスタンス化した「test」クラスを登録しておかなければならない。
server.phpの実際の記述例
require_once 'HTML/AJAX/Server.php'; class test { function say_hello($name) { return "Hello $name !"; } } $server = new HTML_AJAX_Server(); $server->registerClass(new test()); $server->handleRequest();
実際のプロキシクラスのインスタンス方法は以下ようになる。
var proxy = new test(new callback_test());
このクラスの引き数は、javascript側で定義したコールバック関数となる。
コールバック関数の記述例
ここでは、PHP側の「say_hello」メソッドの処理が完了した後のjavascript側の処理を記述している。
PHP側の実行結果を、id「result」のinnerHTMLに出力しているのがわかる。
function callback_test() {} callback_test.prototype = { say_hello: function(result) { document.getElementById('result').innerHTML = result; } }
そして、html側では、HTML_AJAXが提供するjavascript関数を利用可能にする為に、以下の内容を記述しておく必要がある。
<script type="text/javascript" src="server.php?client=all"></script>
あとは、HTMLにアクションを記述し、完了となる。
バラバラに説明しているので、わかりにくいが、以下の記述例を見ると処理の流れが想像できる。
HTMLの記述例
<title>HTML_AJAX テスト</title> <script type="text/javascript" src="server.php?client=all"></script> <script type="text/javascript" src="server.php?stub=test"></script> <script type="text/javascript"></script> function callback_test() {} callback_test.prototype = { say_hello: function(result) { document.getElementById('result').innerHTML = result; } } var proxy = new test(new callback_test()); <a href="javascript:proxy.say_hello('TEST');">Run</a><br /> <span id="result"></span>
HTML読み込み時に、コールバック関数付でtestクラス(PHP側のtestクラスへの仲介クラス)をインスタンス化し、proxyに代入している。
HTML側の「Run」をクリックすると、「TEST」という文字列の引き数付で、PHP側のsay_helloメソッドが透過的に呼び出される。
呼び出された、PHP側は、引き数「TEST」に、「Hello」という文字列をひっつけて返す。
PHP側の処理が完了すると、プロキシクラスのインスタンス化時に引き渡したコールバックメソッドが実行され、処理が完了となる。
また、HTML_AJAXはプロキシを使わない手法もとれるようになっているようだ。
その場合、javascript上で、以下のメソッドを呼びだす。
HTML_AJAX.replace('target', 'output.php');
その他の記述例
「output.php」を非同期で実行し、実行結果をHTML内の「target」要素のinnerHTMLに代入する。
HTML_AJAX.append('target', 'output.php');
「output.php」を非同期で実行し、実行結果をメッセージボックスで表示する。
HTML_AJAX.grab('output.php', function(result){ alert(result); });
「server.php」上の「month」クラスの「lastmonth」メソッドを実行し、実行結果をメッセージボックスで表示する。
HTML_AJAX.defaultServerUrl = 'server.php'; HTML_AJAX.call('month', 'lastmonth', function(result){ alert(result); });
- Newer: [PEAR]HTML_AJAXにprototype.jsを組み込む
- Older: Ajaxに関する情報収集@2006/10