HTML_AJAXでGET,POSTリクエスト
日本語POST対応unescape
EthnaとPEAR :: HTML_Ajaxを組み合わせる
escapeとencodeURIComponent
現状のシステムを置き換えるのも意外と簡単かも。
(ノ・・)ン。。。。。。(((●コロコロッ
Ajaxとは
読み方 : エイジャックス フルスペル : Asynchronous JavaScript + XML Webブラウザに実装されているJavaScriptのHTTP通信機能を使って、 Webページのリロードを伴わずにサーバと XML形式のデータのやり取りを行なって処理を進めていく対話型Webアプリケーションの実装形態。 従来、Webブラウザを使ったWebアプリケーションでは、 データをサーバに通知して処理結果を得るにはページ全体をロードしなおさなければならず、 ネイティブアプリケーションのような操作性を得ることは難しかった。 Ajaxでは、指定したURLからXMLドキュメントを読み込む機能を使い、 ユーザの操作や画面描画などと並行してサーバと非同期に通信を行なうことで、 サーバの存在を感じさせないシームレスなWebアプリケーションを実現することができる。 ちなみに、JavaScriptのHTTP通信機能自体は同期通信にも非同期通信にも対応しており、 受信するデータ形式もXMLとプレーンテキストの両方を選べるため、 プレーンテキストを同期通信する従来型のWebアプリケーションをページ遷移を伴わずに実現するといった使い方もできる。
そのAjaxをPHPで実装するためのフレームワークがHTML_AJAXだ。
(SAJAXというのもあるが、がらくた同然。)
まだ詳しいところはわかっていないので、
一番とっかかりの部分だけ。
pear install -f html_ajax
実装するにはJavaScript?を記述したHTML(ajax.html)ファイルと、
リクエスト受信用のPHP(server.php)ファイル。
実スクリプトのPHP(output.php)ファイル。
の三つを用意する。
ajax.html <html> <body> <script type="text/javascript" src="server.php?client=all"></script> <div id="target">I'm the target</div> <script type="text/javascript"> HTML_AJAX.replace('target','output.php'); </script> <span id="list">I'm the target</span> <script type="text/javascript"> HTML_AJAX.replace('list','output.php?req1=list&req2=list'); </script> </body> </html>
server.php <?php include 'HTML/AJAX/Server.php'; $server = new HTML_AJAX_Server(); $server->handleRequest(); ?>
output.php <? echo print_r( $_GET ); echo "hogehoge"; ?>
出力結果
<html> <BODY> <DIV id="HTML_AJAX_LOADING" style="padding: 4px; position: absolute; top: 0pt; right: 0pt; background-color: red; width: 80px; display: block;"> Loading... </DIV> <SCRIPT src="server.php?client=all" type="text/javascript"/> <DIV id="target"> Array ( ) 1hogehoge </DIV> <SCRIPT type="text/javascript"> HTML_AJAX.replace('target','output.php'); </SCRIPT> <SPAN id="list"> Array ( [page] => list [mod] => list ) 1hogehoge </SPAN> <SCRIPT type="text/javascript"> HTML_AJAX.replace('list','output.php?page=list&mod=list'); </SCRIPT> </BODY> </html>
ポイントは3つ
出力結果はinnerHTMLであること。 GETリクエストが使えること。 リクエスト回数は何回でも可
現状のシステムの一部分に適当なIDをつけて、
実際のリクエストをJavaScript?経由で行えば、
簡単に実装できそうだ。
比較的規模の大きめなパッケージなので、
もっといろいろなことが出来そうだ。
もう少し調べてみます。
ハマリどころ
出力側(今回の例ではoutput.php)の出力文字列をUTF-8にしておかないと、 文字化けが発生する。 どうもArrayクラスのプロトタイプを設定しているみたいで、 Arrayクラスを使ったJavaScriptコードを書いていると、 配列におかしなデータが混入していることがある。 [______array] っていうデータがあった場合はご注意を。 使用時に[Loading...]と必ず表示がされる。 消したい場合はID[HTML_AJAX_LOADING]のタグをページのどこかに用意する。 出来ればspanタグがよい。 そのstyleにdisplay:none属性を付けておく。 <span style="display:none;" id="HTML_AJAX_LOADING"></span>