鄭州大學遠程教育學院網(wǎng)絡管理中心 黃喜民
Web2.0與Ajax技術解析
鄭州大學遠程教育學院網(wǎng)絡管理中心 黃喜民
近來很多成功的Web應用都有一個共同特點,就是依賴于大量用戶來豐富其內(nèi)容,這種特點被稱為Web2.0。伴隨著Web2.0的出現(xiàn),一種新型的Web應用程序也很快地流行起來,這就是Ajax應用程序,這種應用程序通過對服務器的異步請求調(diào)用,極大地改善了Web的響應速度和用戶的交互體驗。
Web2.0是2003年之后互聯(lián)網(wǎng)的熱門概念之一,目前對什么是Web2.0并沒有一個很嚴格的定義。一般來說Web2.0是相對Web1.0(2003年以前的互聯(lián)網(wǎng)模式)的新一類互聯(lián)網(wǎng)應用的統(tǒng)稱。根據(jù)Wiki定義:Web2.0是網(wǎng)絡運用的新時代,網(wǎng)絡成為了新的平臺,內(nèi)容因為每位使用者的參與(Participation)而產(chǎn)生,參與所產(chǎn)生的個人化(Personalization)內(nèi)容,借由人與人(P2P)的分享(Share),形成了現(xiàn)在Web2.0的世界。從這個定義我們可以看出,Web2.0并不是一個具體的事物,而是一個階段,是促成這個階段的各種技術和相關的產(chǎn)品與服務的一個總稱。
與Web1.0相比較,Web1.0的主要特點在于用戶通過瀏覽器獲取信息,而Web2.0則更注重用戶的交互作用,用戶既是網(wǎng)站內(nèi)容的消費者(瀏覽者),也是網(wǎng)站內(nèi)容的制造者。Web2.0與Web1.0的比較見表1。
表1 Web2.0與Web1.0的比較
從表1中可以看出,Web2.0相對于Web1.0而言,是一次從外部應用到核心內(nèi)容的變化,具體地說,從模式上是單純的“讀”向“寫”和“共同建設”發(fā)展;從主要構(gòu)成單元上是由“網(wǎng)頁”向“發(fā)表/記錄的信息”發(fā)展;從工具上是由網(wǎng)頁瀏覽器向各類瀏覽器、RSS閱讀器等內(nèi)容發(fā)展;從體系結(jié)構(gòu)上由ClientServer(客戶端/服務器)向WebServices(Web服務)的轉(zhuǎn)變;內(nèi)容創(chuàng)建者由程序員等專業(yè)人士向全部普通用戶發(fā)展;主導者將由少數(shù)人向大量業(yè)余人士發(fā)展。
Ajax是AsynchronousJavaScriptandXML的縮寫,即異步的JavaScript和XML。通俗地說就是客戶端請求通過異步調(diào)用服務器數(shù)據(jù),實現(xiàn)頁面無刷新操作的技術。Ajax正是實現(xiàn)前面所說的Web2.0的核心技術,借助Ajax可以將笨拙的Web界面轉(zhuǎn)化成強交互性的Ajax應用程序。
在傳統(tǒng)的Web應用程序模型中,瀏覽器負責初始化向服務器的請求,以及處理來自服務器的響應,而Ajax模型則不同,它提供了一個中間層——Ajax引擎——來處理這種通信。Ajax引擎(AjaxEngine)實際上只是一個JavaScript對象或函數(shù),其核心是XMLHttpRequest對象,只有當信息必須從服務器上獲得的時候才調(diào)用它。而且Ajax引擎向服務器發(fā)出的HTTP請求都是異步完成的,不必等收到響應后就可以繼續(xù)執(zhí)行后續(xù)的代碼。
服務器將配置為向Ajax引擎返回其可用的數(shù)據(jù),這些數(shù)據(jù)可以是純文本、XML或者需要的任何格式,唯一的要求就是Ajax引擎能夠理解和翻譯這些數(shù)據(jù)。當Ajax引擎收到服務器響應時,將會觸發(fā)一些操作,通常是完成數(shù)據(jù)解析,以及基于所提供的數(shù)據(jù)對用戶界面做一些修改。由于這個過程中傳送的信息比傳統(tǒng)的Web應用程序要少得多,因此用戶界面的更新速度將很快,用戶也能夠更快地進行他們的工作。Ajax應用程序模型如圖1所示。
圖1 Ajax應用程序模型
從Ajax應用程序模型中可以看出,比起傳統(tǒng)的Web開發(fā)模式,Ajax向傳統(tǒng)桌面程序靠攏了很多,一個基于Ajax的Web頁面已經(jīng)越來越趨向于一個單獨的應用程序。在Ajax應用中,每個Web頁面不一定僅對應一個服務器端頁面,而可能是由多個服務器端頁面共同協(xié)作完成的,同時,一個服務器端頁面又可以為多個客戶端頁面服務,這樣,每個服務器端頁面就可以將功能分得很細。通過Ajax引擎,客戶端頁面可以根據(jù)用戶需要來調(diào)用服務器端相應頁面,獲得數(shù)據(jù)并顯示在頁面上。此時大多數(shù)服務器端的頁面已經(jīng)不再是界面表現(xiàn)的工具,而是作為提供數(shù)據(jù)的“接口”,一個Web頁可以從多個接口中獲取數(shù)據(jù),并將它們更新在頁面中。
Ajax不是單一的技術,而是多種現(xiàn)有技術的綜合體現(xiàn)。
1.描述頁面的HTML/XHTML。Ajax使用HTML/XHTML描述文檔的結(jié)構(gòu),但僅用于描述Ajax頁面的初始樣式。在初始化之后,文檔結(jié)構(gòu)可能會隨著程序的運行而有所變化。同時,HTML/XHTML還會告知瀏覽器下載將運行于客戶端的JavaScript以及定義頁面樣式的CSS等相關文件。
2.表示文檔結(jié)構(gòu)的DOM。DOM(DocumentObjectModel)即文檔對象模型,是HTML和XML文檔的一個應用程序接口(API)。它提供了一種結(jié)構(gòu)化的文檔表示方式,它把網(wǎng)頁、腳本和編程語言連接了起來。JavaScript可以訪問到當前頁面的DOM對象,并通過對其操作來間接地改變該頁面的內(nèi)容及結(jié)構(gòu)。
3.定義元素樣式的CSS。CSS(CascadingStyleSheet)即層疊樣式表,用來指定HTML文件中元素實現(xiàn)的樣式。通過使用CSS可將文檔的結(jié)構(gòu)和表現(xiàn)完全分開,HTML部分可專注于定義文檔的結(jié)構(gòu),而控制樣式則交給CSS來處理。這樣極大地降低了DOM對象的復雜性,方便使用JavaScript對其進行維護。
4.表示服務器和客戶端通信內(nèi)容的XML。XML(eXtensibleMarkupLanguage),是一種擴展性標識語言。在Ajax技術中,客戶端與服務器端交換的數(shù)據(jù)通常采用這種語言來描寫。由于XML是一種通用的標識語言,可以在不同的CGI程序中被讀取,提高了Web應用程序的可擴展性,從而可以把用Ajax技術開發(fā)的頁面程序綁定到不同平臺的服務器程序中。
5.實現(xiàn)與服務器異步通信的XMLHttpRequest對象。XMLHttpRequest對象,早在1998年就已經(jīng)集成到了IE中了。隨后,在各種主流的瀏覽器中也陸續(xù)開始得到支持。XMLHttpRequest對象的強大之處在于,它允許開發(fā)者在JavaScript中以異步的方式向服務器發(fā)出HTTP請求并得到響應,用戶會有類似于桌面應用程序的動態(tài)、快速響應和高交互性的體驗。
6.協(xié)調(diào)上述各種技術的JavaScript。JavaScript將上面提到的所有技術黏合在一起。通過JavaScript代碼,開發(fā)者可以訪問并維護當前頁面的DOM對象,包括對其進行添加、刪除和修改等操作,還可以通過維護某個DOM元素的CSSClass來改變它的外觀樣式,也可以使用XMLHttpRequest對象訪問服務器的CGI程序,并將返回的XML或JSON類型的數(shù)據(jù)解析后應用到當前的計算或顯示中。
作為一種新的Web應用程序模型,Ajax是一項非常誘人的技術,但并不意味著它就是一項通用的技術,一些場合使用Ajax可以帶來很好的用戶體驗,而另外一些場合有可能給用戶的使用帶來災難。Ajax的優(yōu)點是可以很方便地實現(xiàn)異步交互與動態(tài)刷新Web頁面,因此適用于用戶和服務器交互頻繁的場合。
作為Web2.0的主流應用技術,Ajax使瀏覽器可以為用戶提供更為自然的瀏覽體驗,同時Ajax使得Web應用既保留了B/S結(jié)構(gòu)的優(yōu)點,又具有C/S結(jié)構(gòu)應用的強大功能和用戶感受。所以,可以認為,Ajax就是Web標準和Web應用的可用性理論的集大成者,它極大地改善了Web應用的可用性和用戶的交互體驗,最終得到了用戶和市場的廣泛認可,因此,Ajax技術在Web2.0時代的廣泛應用也是用戶和市場的共同選擇。