了解Ajax的朋友也許知道其實這種炫麗效果的實現並不是一件很為難的事,當然如果你不了解何為Ajax那也沒有關系,本節我們就通過打造一個新聞評論系統,來看看到底什麼是Ajax,首先我們還是先了解一些基礎東西。
什麼是Ajax?
Ajax提出者Jesse James Garrett在《Ajax:一個Web應用的新途徑》中提到Ajax為“Asynchronous JavaScript + XML”的簡稱,也就是異步的JavaScript和XML處理。其包含:
用XHTML和CSS進行基於標准的表示方式:
采用DOM(document object model)動態顯示和交互操作;
采用XML和XSLT進行數據交換和操作;
采用XMLHttpRequest進行異步數據獲取;
采用JavaScript綁定上述技術應用;
Ajax與傳統Web應用有什麼不同?
Ajax與傳統Web應用最大的不同就是Ajax可以對頁面某一個區域進行局部加載,而不是像傳統Web中每次頁面請求後的都必須重新加載整個頁面,特別在頁面負載比較大的情況下,頁面加載時間就比較長,用戶多數時間就處在等待狀態,而呈現給用戶的僅僅是一片空白,而在Ajax的應用中就可以很好的避免這類事情的發生。
Ajax的工作原理是什麼?
Ajax主要是通過JavaScript對象中的XmlHttpRequest向服務器提出請求,並根據處理的結果更新頁面。這樣的更新不會使整個頁面全部更新,而是根據用戶的需要對某個區域進行局部更新,而且在更新的同時不影響其它區域的浏覽。例如:搜狐個人博客中每個欄目後面的刷新按鈕。
什麼是XmlDom?
XMLDOM是用來訪問和操作XML文檔的編程接口規范。XMLDOM被設計為可用於任何語言和任何操作系統。借助DOM,程序員可以創建XML文檔、遍歷其結構,增、改、刪其元素。DOM將整個XML文檔視作一棵樹,文檔級的元素是樹的根。
下面我們就來看看幾個與本教程相關的功能,值得注意的是以下方法或屬性並不是同一個對象下,具體請看說明:
getElementsByTagName 方法
說明:傳回指定名稱的元素集合。
語法:objNodeList = xmlDocument.getElementsByTagName(tagname);
例:var node=xmlDom.responseXML.getElementsByTagName("pl");
getAttribute()方法
說明:獲得某個元素節點的屬性值
語法:elementNode.getAttribute(name)
例:var tot=xmlDom.responseXML.getElementsByTagName("pl")[0].getAttribute("tot");
childNodes 屬性
說明:傳回一個節點列表,包含該節點所有可用的子節點。
語法:objNodeList=node.childNodes;
例:objNodeList = xmlDoc.childNodes;
如需具體的某一個節點, var u= xmlDoc.childNodes(0);
Length屬性 ()
說明:返回一個節點列表中的節點數量
語法:nodelistObject.length
例:var len=node.length;
至此,基礎知識已經講完了,如果你還是不太了解的話,那建議你去看一些javascript相關的教程。下面我們就看這個新聞評論系統的具體實現原理
假設有一個頁面index.asp,上半部分為評論列表顯示區域,下面為評論提交區域。那麼這樣一個頁面我們如何顯示評論內容和提交評論呢?
傳統:上半部分評論列表直接通過數據庫查詢語句讀取並顯示,每當提交新的評論時,先傳遞給處理頁面,處理頁面處理完畢後再返回index.asp這個頁面,當然index.asp是重新加載獲得新的評論。
Ajax::首先列表頁面的內容是一個單獨的xml文件(pl_list.asp),然後index..asp中的上半部分評論通過XmlHttpRequest請求pl_list.asp頁面,並通過返回的結果傳遞到需要更新區域。提交評論同樣如此,每次提交采用XmlHttpRequest請求提交處理程序,然後重新更新評論列表顯示區域。
此新聞評論系統共分為五個部分,分別為數據庫、前台頁面、JS代碼、服務器處理、CSS樣式。
數據庫的設計
PL表:
字段名
類型
長度
id
自動編號
user
文本
20
dateandtime
日期/時間
content
備注
newid
數字
前台頁面:(index.htm)
如上圖所示,前台頁面共包括兩部分,上半部分為頁面評論列表顯示,下半部分為提交評論。由於我們這裡只是模擬一個新聞評論系統,並沒有真正的新聞頁面,那麼在傳遞新聞ID的時候我們采用了一個默認值 〈input name="newsid" value="1" type="hidden"/〉。
代碼:index.htm
〈%@LANGUAGE="VBS