全文検索プログラム

fileObj = new Object();
fileObj.httpObj = null;
fileObj.extList = [".txt",".html",".xml"]; // 検索対象にするファイルの拡張子
// ファイル一覧情報を読み込み
window.onload = function() {
// カレントディレクトリ以下のファイル一覧を取得する
new Ajax.Request("spotlight.cgi?cache="+(new Date()).getTime(), {
method:"get",
onSuccess:function(httpObj) {
var temp = httpObj.responseText;
var LF = String.fromCharCode(10);
fileObj.fileListTemp = temp.split(LF);
fileObj.fileListTemp.pop();
fileObj.fileList = new Array();
// 指定された拡張子のみリストに登録する
for (var i=count=0; i<fileObj.fileListTemp.length; i++)
{
var str = fileObj.fileListTemp[i];
for (var j=0; j<fileObj.extList.length; j++) {
if (str.lastIndexOf(fileObj.extList[j]) > -1) fileObj.fileList[count++] = fileObj.fileListTemp[i];
}
$("result").innerHTML += ".";
}
$("searchWord").disabled = false;
$("searchWord").focus();
$("status").innerHTML = "[ファイルリスト読み込み完了]";
$("result").innerHTML = "";
fileObj.oldKeyword = "";
setTimeout("fileObj.findInit()",100);
}
});
fileObj.oldKeyword = "dummy";
// リターンキーが押された時の処理
$("ajaxForm").onsubmit = function(){
fileObj.oldKeyword = "dummy";
fileObj.findInit();
return false;
}
}
// 全文検索処理
fileObj.findInit = function() {
var keyword = $F("searchWord");
if (fileObj.oldKeyword != keyword) {
fileObj.oldKeyword = keyword;
fileObj.count = 0; // カウンタを初期値に設定
fileObj.resultList = ""; // 結果のリストを消去
try { fileObj.httpObj.abort(); }catch(e){ } // 通信を強制中断
fileObj.findStart();
$("result").innerHTML = "";
$("status").innerHTML = "[検索中です...]";
}
setTimeout("fileObj.findInit()",100);
}
// ファイル内容を非同期通信で読み込ませる
fileObj.findStart = function() {
var fname = encodeURIComponent(fileObj.fileList[fileObj.count]);
new Ajax.Request("filesend.cgi?filename="+fname+"&cache="+(new Date()).getTime(), {
method:"get",
onLoading:function(httpObj){ fileObj.httpObj = httpObj; },
onSuccess:fileObj.find } );
}
// 全文検索処理(キーワード検索処理)
fileObj.find = function(httpObj)
{
var txt = httpObj.responseText;
var ReObj = new RegExp(fileObj.oldKeyword, "gi");
if (txt.match(ReObj)) {
if (fileObj.fileList[fileObj.count].toString() != "undefined") {
fileObj.resultList += "<a href='"+fileObj.fileList[fileObj.count]+"' target='pageData'>"+fileObj.fileList[fileObj.count]+"</a><br>";
}
}
fileObj.count++;
if (fileObj.count < fileObj.fileList.length) {
fileObj.findStart();
}else{
$("status").innerHTML = "[検索終了]";
}
$("result").innerHTML = fileObj.resultList;
}
・サンプルを実行
・サンプルをダウンロード
Ajax実践テクニック 説明などは本書を参考にしてください。JavaScript以外のソースはデータをダウンロードするか本書を参照してください。