前のページ(Script 通信)へ / 次のページ(閑話休題)へ
AJAX のサンプルとして掲示板を作ってみました。 クライアント側は JavaScript で、 サーバ側は php から SQLite を操作して作っています。 機能としては
- AJAX
- XMLHttpObject 通信により読み書きを行う。 画面遷移がないので軽快に動作する。
- ユーザー認証
- 入力されたユーザー名とパスワードが登録されたものと一致したときに そのユーザーに許可された操作が行える。 現在は読み込みと書き込みについてそれぞれの許可が指定出来る。
- 部分読み込み
- 既存の記事を読み込むとき id の範囲を指定して読み込める。 繰り返しリロードした場合に無駄な転送を減らすことが出来る。
- 書き込み
- 新しい記事を書き込むことが出来る(掲示板なのだから当然)。
- 既知の欠点
-
読み書きを非同期で行っているために 条件によっては自分が書き込んだ内容が すぐには表示されないことがある。 書き込みに成功していれば何度か再読み込みすると表示される。書き込み終了後に読み込みタスクを開始するようにしました。 自分の書き込みは書き込みからちょっと遅れるものの 確実に表示されるようになったはずです。 ちなみに書き込みタスク自体が読み込みもしても良いのですが、 非同期を強調するため別タスクとして動かしています。
というところです。 現在はユーザー認証の部分が非表示にしてあり 誰でも guest アカウントで読み書きするようになっています。 ここを制限すれば会員制掲示板にも出来ます。 共有アカウントでも簡単な合言葉を設定すれば軽いスパム対策にもなります。
本格的に使用するには何ヶ所か改造する必要があります。 例えば、書き込み日時や IP も記録するべきでしょうし、 書き込みだけでなく削除も行えるべきでしょう。 本文や IP などから書き込みを拒絶したり、 新着書き込みを管理者へメールで通知したり、 といった機能もあった方が良いかもしれません。 (download)
最初は書いていなかったのですが、 念のため追記しておきます。 この掲示板はときどきデータを消します。 あくまでもサンプルということで使ってください。
mod_layout が入っているサーバでは .htaccess に
LayoutIgnoreURI bbs.php
LayoutIgnoreURI */bbs.php
と書いておく必要があります。
mod_layout がヘッダーを text/html にするので
XMLhttpObject の返り値が XML として扱われず
読み込み処理が正しく行われません。
さらに追記。
xmlHttpObject.overrideMimeType('text/xml');
でヘッダーを上書きするように変えてみました。
これで mod_layout が入っていてもそのまま使えます。
しかし mod_layout には空白行を付け加えてしまう問題もあるので
どちらにせよ .htaccess は書かないとならないようです。
設定した後に説明を書き足すのを忘れていました。
追記。
xreaではLayoutIgnoreURIは非標準のようです。
サーバによっては使えないかもしれません。
修正です。 encodeURIComponet() するべきところを encodeURI() していました。 投稿内容が + などの記号を含むときに 途中で分割されてしまうことがあったのを修正しました。
安定してスパムが来るようになったので パスワード機能を有効にしてみましょうか。 書き込むためにはID,Password欄の両方に 私のハンドルを入れてください。
- メッセージが
- ここに表示されます。