Simple Ajax Toolkit SAJAX というのを見つけました。クライアント側の HTML も、サーバで生成してしまうライブラリで、Perl、PHP、Ruby、Python などのスクリプトが入っています。ASP とか JSP とか PHP とかで作ったウェブアプリケーションなどでは、当然、こうなりますね。全部サーバ側で管理できるので、Model/View/Contorl 的な書き方もできます。
で、SAJAX を使うのかと見せかけて、結局使わないで、ちまちま書いています。
# サーバ
from SimpleHTTPServer import SimpleHTTPRequestHandler
from BaseHTTPServer import HTTPServer
import socketclass Server(HTTPServer):
# 動作中に Ctrl+C で停止させたあと、再び実行しても
# ポートが使用中ですとかいうエラーがでないように、オーバーライド。
def server_bind(self):
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
HTTPServer.server_bind(self)# 標準ライブラリの SimpleHTTPRequestHandler を継承します。
# QUERY メソッドのハンドラを追加します。Ajax で使うのは、このメソッド
# GET メソッドはデフォルトのまま、ファイルの内容を返す。
class Handler(SimpleHTTPRequestHandler):
def do_QUERY(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
try:
content = query(self.path[1:])
except Exception:
content = ""
print >>self.wfile, content
// クライアントの JavaScript
var req;function query() {
// Ajax 通信用に QUERY メソッドでデータを送信する。
asyncCall("QUERY", document.ui.inputString.value, myCallback);
}function asyncCall(method, url, callback) {
if (window.XMLHttpRequest) {
req = new window.XMLHttpRequest();
req.onreadystatechange = callback;
req.open(method, url, true);
req.send(null);
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = callback;
req.open(method, url, true);
req.send();
}
}
}