如果你對AJax不是很了解,可以先看看這篇教程的前篇《AJax初體驗之上手篇》。
現在博客很流行,相信應該上網時間稍微長點的朋友都會在這或者在那的有一個自己的博客。對於一些有一定能力的朋友,可能更喜歡自己去下載一個博客程序來架設一個自己的博客,而不是使用一些博客網站提供的服務。而大部分博客程序所帶的搜索功能是提交查詢關鍵字到搜索頁面,然後在後台生成搜索結果,再呈現給用戶,這過程之中浪費了一些帶寬,如博客的側邊欄。要節約這一些帶寬,我們可以用AJax來打造自己的無刷新日志搜索。
在本篇教程中,數據庫的表名和日志查看頁面以L-Blog為例,因為我的博客程序是從L-Blog修改而來'。
本教程中的例子已經通過實際測試,可以直接在L-Blog或FBS中使用。當然,要真正應用的話還是需要做一些美化及完善的。
在數據庫中日志內容數據表名為blog_Content,其中日志ID為log_ID,日志標題為log_Title,日志查看頁面為blogvIEw.ASP,參數為日志logID。有了這些資料,就可以開始創建搜索結果的XML文檔模板了。在顯示搜索結果時,需要顯示日志的標題,以及日志的ID來創建到查看日志的鏈接。
搜索結果模板sample.XML
每個result就是一個搜索結果,為了處理沒有找到相關內容的情況,我定義了當搜索結果為空時logid為#。
在完成XML文檔模板之後,就可以用ASP來動態生成搜索結果需要的XML文檔了。搜索的關鍵字采用POST方式來傳遞。
搜索結果輸出AJaxsearch.ASP
var XMLObj = false;
var XMLResult;
try {
XMLObj=new XMLHttpRequest;
}
catch(e) {
try {
XMLObj=new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e2) {
try {
XMLObj=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e3) {
XMLObj=false;
}
}
}
if (!XMLObj) {
alert("XMLHttpRequest init Failed!");
}
function AJaxSearch() {
var searchWord;
searchword=escape(document.getElementById("searchWord").value);
if(searchWord=="") {
document.getElementById("search_result").innerHtml="<ul><li>請輸入關鍵字!</li></ul>";
return;
}
document.getElementById("search_result").innerHtml="<ul><li>正在加載,請稍候</li></ul>";
XMLObj.open ("POST", "AJaxsearch.ASP", true);
XMLObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
XMLObj.onreadystatechange=function() {
if(XMLObj.readyState==4) {
if(XMLObj.status==200) {
XMLResult=XMLObj.responseXML;
AJaxShowResult();
}
}
}
XMLObj.send("searchword="+searchWord);
}
function AJaxShowResult() {
var results,i,strTemp;
results=XMLResult.getElementsByTagName("result");
strTemp="<ul>";
if(results[0].getElementsByTagName("logid")[0].firstChild.data=="#")
strTemp=strTemp+"<li>無搜索結果</li>";
else
for(i=0;i<results.length;i++)
strTemp = strTemp + "<li><a href='blogvIEw.ASP?logID=" + results[i].getElementsByTagName("logid")[0].firstChild.data + "'>" + results[i].getElementsByTagName("logtitle")[0].firstChild.data + "</a></li>";
strTemp=strTemp+"</ul>";
document.getElementById("search_result").innerHtml = strTemp
}
至此,一個完整的AJax實例完成了。
幾個經驗:
1. 頁面使用UTF-8編碼,這樣可以省卻很多煩惱
2. 在獲取搜索結果時,因為用的getElementsByTagName,返回的是一個集合,所以要在結果之後加上下標,如例子中的:
results[i].getElementsByTagName("logid")[0].firstChild.data
3. 建議使用document.getElementById()來獲取對象,而不要使用document.all這樣的方法