使用AJAX技術打造博客無刷新搜索引擎_AJAX教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:AJAX、AJAX實例及AJAX源代碼(asp)
      AJAX介紹 AJAX 關鍵詞: JavaScript腳本和可擴展標記語言(XML) WEB瀏覽器技術 開放式WEB標準 瀏覽器以及獨立平臺 更好更快的網絡應用程序 XML以及HTTP請求 AJAX = 異步JavaScript和可擴展標記語言 AJAX是一種運用JavaScript和可擴展標記語言(XML),在網絡瀏覽

      現在博客很流行,相信應該上網時間稍微長點的朋友都會在這或者在那的有一個自己的博客。對于一些有一定能力的朋友,可能更喜歡自己去下載一個博客程序來架設一個自己的博客,而不是使用一些博客網站提供的服務。而大部分博客程序所帶的搜索功能是提交查詢關鍵字到搜索頁面,然后在后臺生成搜索結果,再呈現給用戶,這過程之中浪費了一些帶寬,如博客的側邊欄。要節約這一些帶寬,我們可以用AJAX來打造自己的無刷新日志搜索。

      在本篇教程中,數據庫的表名和日志查看頁面以L-Blog為例,因為我的博客程序是從L-Blog修改而來。

      本教程中的例子已經通過實際測試,可以直接在L-Blog或FBS中使用。當然,要真正應用的話還是需要做一些美化及完善的。

      在數據庫中日志內容數據表名為blog_Content,其中日志ID為log_ID,日志標題為log_Title,日志查看頁面為blogview.asp,參數為日志logID。有了這些資料,就可以開始創建搜索結果的XML文檔模板了。在顯示搜索結果時,需要顯示日志的標題,以及日志的ID來創建到查看日志的鏈接。

      搜索結果模板sample.xml

      CODE:
      <?xml version="1.0" encoding="utf-8"?>
      <blogsearch>
      <!-- 每一個reslut就是一個搜索結果 -->
      <result>
      <!-- 日志的ID -->
      <logid>1</logid>
      <!-- 日志的標題 -->
      <logtitle>AJAX初體驗之上手篇</logtitle>
      </result>
      </blogsearch>

      每個result就是一個搜索結果,為了處理沒有找到相關內容的情況,我定義了當搜索結果為空時logid為#。
      在完成XML文檔模板之后,就可以用ASP來動態生成搜索結果需要的XML文檔了。搜索的關鍵字采用POST方式來傳遞。

      搜索結果輸出ajaxsearch.asp

      CODE:
      <!-- #include file="commond.asp" -->
      <!-- #include file="include/function.asp" -->
      <%
      ' commond.asp為數據庫連接文件
      ' function.asp中有要用到的函數CheckStr
      Dim Search_Word,XML_Result,rsSearch,sqlSearch
      Set rsSearch=Server.CreateObject("ADODB.RecordSet")
      ' 獲取搜索關鍵字
      Search_Word=CheckStr(Trim(Request.Form("searchword")))
      ' XML文檔頭
      XML_Result="<?xml version=""1.0"" encoding=""utf-8""?><blogsearch>"
      IF Search_Word<>Empty Then
      ' 創建查詢SQL語句
      sqlSearch="SELECT log_ID,log_Title,log_Content FROM blog_Content WHERE log_Title LIKE '%"&Search_Word&"%' AND log_IsShow=True ORDER BY log_ID DESC" 
      ' 打開記錄集
      rsSearch.open sqlSearch,Conn,1,1
      ' 如果沒有搜索結果就產生一個結果,logid為#,標志著沒有搜索結果
      IF rsSearch.BOF AND rsSearch.EOF Then XML_Result=XML_Result&"<result><logid>#</logid><logtitle /></result>" 
      ' 循環輸出搜索結果
      Do While Not rsSearch.EOF
      ' 循環輸出每一個結果
      XML_Result=XML_Result&"<result><logid>"&rsSearch("log_ID")&"</logid><logtitle><![CDATA["&rsSearch("log_Title")&"]]></logtitle></result>" 
      rsSearch.MoveNext
      Loop
      Else
      ' 關鍵字為空,則返回無搜索結果
      XML_Result=XML_Result&"<result><logid>#</logid><logtitle /></result>"
      End IF
      XML_Result=XML_Result&"</blogsearch>"
      ' 設置MIME Type為XML文檔
      Response.ContentType = "application/xml"
      'Response.CharSet = "utf-8"
      ' 輸出搜索結果
      Response.Write(XML_Result)
      %>

      有了后臺搜索結果輸出的部分,就可以開始寫前臺搜索的部分了。
      首先需要的是給用戶輸入搜索關鍵字及顯示搜索結果的地方,我用div來分別顯示這兩個部分:

      ajaxsearch.htm

      CODE:
      <!-- 要用到JavaScript,外部鏈入 -->
      <script type="text/javascript" src="ajaxsearch.js"></script>
      <!-- 用戶輸入部分 -->
      <div>
      <!-- 因為沒有用form,所以要處理input的keydown事件。在用戶按下回車后搜索 -->
      <input type="text" id="searchword" onkeydown="if(event.keyCode==13) AjaxSearch();" /> 
      <!-- 搜索按鈕 -->
      <input type="button" onclick="AjaxSearch();" value="搜索" />
      </div>
      <!-- 搜索結果顯示部分 -->
      <div id="search_result">
      <!-- 初始時提示用戶輸入搜索關鍵字 -->
      <ul><li>請輸入關鍵字</li></ul>
      </div>

      完成了用戶輸入及結果輸出的部分,就可以開始寫最后的部分——客戶端程序了。
      首先是創建XMLHttpRequest對象,這部分代碼不再多說,對AJAX稍有接觸應該都看得懂這段代碼,前篇教程中也有詳細注釋:

      ajaxsearch.js(part1)

      CODE:
      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!");
      }

      接下來是發送搜索請求部分:

      ajaxsearch.js(part2)

      CODE:
      function AjaxSearch() {
      var searchword;
      // 獲取搜索關鍵字,并且進行URLEncode
      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>";
      // 打開一個連接,采用POST
      xmlObj.open ("POST", "ajaxsearch.asp", true);
      // 設置請求頭,表單內容格式為URLEncoded
      xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
      // 設置完成請求后響應函數
      xmlObj.onreadystatechange=function() {
      // 完成響應
      if(xmlObj.readyState==4) {
      // 狀態正常
      if(xmlObj.status==200) {
      // 設置xmlResult為搜索結果XML文檔
      xmlResult=xmlObj.responseXML;
      // 調用AjaxShowResult()顯示搜索結果
      AjaxShowResult();
      }
      }
      }
      // 發送請求,內容為搜索的關鍵字
      xmlObj.send("searchword="+searchword);
      }

      最后是搜索結果的顯示:

      ajaxsearch.js(part3)

      CODE:
      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實例完成了。

      幾個經驗:

      • 頁面使用UTF-8編碼,這樣可以省卻很多煩惱
      • 在獲取搜索結果時,因為用的getElementsByTagName,返回的是一個集合,所以要在結果之后加上下標,如例子中的:
        results[0].getElementsByTagName("logid")[0].firstChild.data
      • 建議使用document.getElementById()來獲取對象,而不要使用document.all這樣的方法

      分享:解析RIA和AJAX
      從體驗時代的@RIA郵件系統和@AJAX郵件系統分析RIA和AJAX 本文主要通過對RIA郵件應用和AJAX郵件應用的用戶體驗對比,按照對比分析的方式將體驗中的感性升華為理性。同時,此文也可以給所有從事WEB工作的設計人員和開發人員以借鑒參考,也能普及RIA常識和AJAX

      來源:模板無憂//所屬分類:AJAX教程/更新時間:2010-03-28
      相關AJAX教程