というのは以前どこかのサイトで経験したことはあったのですが、実際に自分の環境にスクリプトを置いて動かした事がなかったので、今回はフリーなCGIと自宅サーバー情報サイト CMFよりサンプルをいただき、こちらの環境に合わせる事と、見た目などを少しいじって動かしてみました。
↓一応正常に動きます(笑)
【Ajax】Ajax入力補完を試してみた
今はまともに動いていますが、こうなる前には下記のような幾つかの問題がすぐに発生しました。
1.PHPからUNIXシェルを使用してテキストファイルを操作できない。
2.文字化けしまくる。
3.該当結果一覧表示(補完された文字列を選択する場所)の最後に広告のソースコードが自動挿入される。
1はレンタルサーバのセキュリティ対策でしょうか。
元スクリプトはshell_execでgrepをかけてテキストファイルから該当するデータを抜き出して配列に格納しているのですが、この部分が動かないので当然何の結果も返ってきません(笑)
仕方がないのでfopenで開いて一行ずつ先頭が一致するかチェックして一致したデータを配列に格納しました。
で、1の解決と共に2がそこら中で発生することが判明 汗
テキストから読み込むデータやPHP→Javascript→PHPと渡るデータ等がことごとく化けるので、何箇所かでエンコーディング
mb_convert_encoding($hoge,"utf-8","auto")
を行いました。
それでもど〜〜してもうまく値が拾えない箇所があって、
(日本語が入力された場合、その語句とテキストファイルから取得したデータの先頭からmb_strlen(語句)番目までの値の比較)
まぁ動作検証だしほっとこうかな とか適当にあきらめつつあったのですが、駄目もとでスクリプトの先頭に
mb_internal_encoding("UTF-8");
を書いてみたらあっさり解決(笑)
最後の広告云々は
デフォルトで全てのページにレンタルサーバ側が広告を自動挿入するという設定になっていたのが原因らしく、自動挿入設定をやめて.htaccessとPHPを使って手動でページの一番先頭へ入れるようにしたら出なくなりました。
動作環境の解決と、あとは挙動と体裁を少しさわった程度ですが
結構疲れました(笑)
肝心なAjax部分のソース(javascriptの)はほぼ全くと言っていいほどさわっていません(爆)
ソースを読んだりネットの文献を読んだ感じですとどうやら非同期通信等の手順はある程度決まっているようなので、その処理とGUI表現(これが結構面倒くさいかも・・・)以外の部分はPHP等のサーバサイドスクリプトでの作り方次第っぽいです。
まあ今回はおぼろげながらそれがわかっただけでもよしとします。
テキストではなくDBを使えばもっと高速になりそうですし、細かい検索が可能になるので色々とできそうです。
ただ、サーバにかかる負担は結構なものだろうなぁと思います。
DBを使うとすれば、入力文字が変わるたびにSQLで問い合わせるんですよね・・・。
それから、当然の事ながらAjaxはjavascriptを多用しますが、世の中にはjavascriptをデフォルトでoffにしているユーザもいるわけで、その辺も考えどころですね。
そういった事を考えるとどうしても、社内システム等クローズドな空間で且つ一定のルールに従ったユーザの下での活用ということになるんでしょうかねぇ。
まあ、Googleはその程度の負担や問題はものともしないんでしょうね・・・(笑)