摘要:介紹了Ajax的基本原理及其在Web應(yīng)用程序開發(fā)中的優(yōu)勢,探討了在開發(fā)Web應(yīng)用程序過程中如何有效地通過Ajax降低網(wǎng)絡(luò)負(fù)載和改善用戶瀏覽體驗(yàn)等問題,為開發(fā)和研究Web應(yīng)用開辟了新的思路。
關(guān)鍵詞:Ajax; Web應(yīng)用程序; XML
中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)12-20ppp-0c
Ajax Basic Principle and Its Web Application Discussion
XU Ying-juan
(College of Computer and Communication project, Weifang University, Weifang 261061, China)
Abstract: This paper introduced the basic principle of Ajax and its advantage in Web application program development, discussed how to reduce network load and improvement user efficiently in development Web application program based on Ajax, opened up new way to develop and study Web application.
Key words: Ajax; Web application program; XML
1 引言
傳統(tǒng)的Web應(yīng)用程序是基于觸發(fā)的事件驅(qū)動(dòng)模式。詳細(xì)地說,用戶在請求服務(wù)器端的數(shù)據(jù)時(shí)必須通過在瀏覽器端窗體上定制用戶請求信息并提交給服務(wù)器,服務(wù)器端接收到用戶請求信息后觸發(fā)相應(yīng)的事件來處理該信息并將結(jié)果回傳給客戶端瀏覽器。這種事件驅(qū)動(dòng)模式處理Web數(shù)據(jù)請求的能力是非常強(qiáng)大的,但是也存在一定的問題,那就是客戶端往往不能即時(shí)得到服務(wù)器的響應(yīng),因此也經(jīng)常無法給用戶提供良好的瀏覽體驗(yàn),成為制約Web應(yīng)用軟件開發(fā)的瓶頸。因此,關(guān)于頁面的載入技術(shù)的研究也就成為Web應(yīng)用程序設(shè)計(jì)的關(guān)鍵,然而這種狀況一直沒能徹底改變,直到Ajax技術(shù)的出現(xiàn)。AJAX提供與服務(wù)器異步通信的能力,幾乎可以在用戶沒有覺察的情況下更新或者查詢數(shù)據(jù),同時(shí)服務(wù)器返回的數(shù)據(jù)通過AJAX更新用戶界面(而不是刷新整個(gè)Web頁面),這樣不僅提高了服務(wù)器的響應(yīng)靈敏度,同時(shí)也大大提升了用戶體驗(yàn)。
2 Ajax的工作原理
Ajax是Asynchronous JavaScript And XML(異步JavaScript 和 XML)英文單詞的縮寫。它由一組蓬勃發(fā)展的技術(shù)組合而成,其核心技術(shù)是JavaScript、Document Object Model(簡稱DOM)、XMLHttpRequest和XML。AJAX的工作原理相當(dāng)于在客戶端和服務(wù)器之間加了一個(gè)中間層,即Ajax引擎[1]。這樣,并不是所有的用戶請求都提交給服務(wù)器,一些數(shù)據(jù)的驗(yàn)證和處理由Ajax自己來做,只有確實(shí)需要從服務(wù)器讀取新數(shù)據(jù)時(shí),才由客戶端通過JavaScript調(diào)用Ajax引擎向服務(wù)器端發(fā)出Http請求,但它并不等待請求的響應(yīng),用戶可以繼續(xù)瀏覽或交互。當(dāng)服務(wù)端的數(shù)據(jù)以XML形式返回時(shí),Ajax引擎接收數(shù)據(jù),并指定JavaScript函數(shù)來完成相應(yīng)的處理或頁面的更新,而不是刷新整個(gè)頁面,—個(gè)中間層服務(wù)器程序,使用戶操作與服務(wù)器響應(yīng)異步化。這樣就減輕了服務(wù)器的負(fù)擔(dān),提升了服務(wù)器的響應(yīng)靈敏性,給用戶良好的瀏覽體驗(yàn)。Ajax的基本工作原理如圖1所示。
3 Ajax的優(yōu)點(diǎn)
作為一種新的應(yīng)用程序技術(shù),Ajax具有如下優(yōu)點(diǎn):按需取數(shù)據(jù)從而減輕服務(wù)器的負(fù)擔(dān);無刷新更新頁面,減少用戶心理和實(shí)際的等待時(shí)間,帶來更好的用戶體驗(yàn);較少的服務(wù)器端事件,可以把一些傳統(tǒng)方式下由服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)移到客戶端,利用客戶端閑置的能力來處理數(shù)據(jù),從而充分利用資源;可調(diào)用外部數(shù)據(jù);基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù)[2],不需要下載插件或者小程序;進(jìn)一步促進(jìn)頁面呈現(xiàn)和數(shù)據(jù)的分離。
4 利用Ajax從Web頁中返回?cái)?shù)據(jù)
對于簡單數(shù)據(jù),可以通過XMLHTTPRequest對象的open方法將需要請求的Web頁的絕對路徑作為參數(shù),該路徑后面可能連接有關(guān)的Get方法調(diào)用的數(shù)據(jù)。當(dāng)調(diào)用成功返回后從該對象的responseText屬性中將返回的單個(gè)數(shù)據(jù)提取出來。被請求的Web頁中首先生成要返回的數(shù)據(jù),這可以通過使用任何基于.NET Framework技術(shù)如繼承等來實(shí)現(xiàn);然后可以選擇以下兩種方式將數(shù)據(jù)返回到客戶端:(1)在該頁的load事件的處理方法中利用Response.Write()方法實(shí)現(xiàn)將數(shù)據(jù)返回;(2)利用render方法中的HtmlTextWriter對象Write方法返回。從而在瀏覽器端Web頁中便實(shí)現(xiàn)簡單數(shù)據(jù)的返回。
同樣,用戶可以利用客戶端瀏覽器向服務(wù)器請求一些較為復(fù)雜的數(shù)據(jù),例如數(shù)據(jù)表、結(jié)構(gòu)體甚至業(yè)務(wù)對象等。只要服務(wù)器端將此類復(fù)雜數(shù)據(jù)序列化為XML格式數(shù)據(jù),我們便可以通過在客戶端XMLHTTPRequest對象的responseXML屬性返回一個(gè)XMLDOC對象,此對象能夠處理XML并將結(jié)果展示在客戶端瀏覽器[3]。下列代碼顯示了如何將CLR用戶定義類型序列化為XML格式并將其放入XML元素:
Sqlstring s=new sqlstring(\"0:0\");
udtclientApp.point pnt=point.parse(s);
System.IO.memorystream writer=new system.IO.Memorystream();
System.xml.serialization.xmlserializer
serializer=new system.xml.serialization.xmlserializer(typeof(udtclientapp.point));
Serializer.serialize(writer,pnt);
Writer.seek(0,system.io.seekorigin.begin);
System.xml.xmldocument xmldoc=new system.xml.xmldocument();
Xmldoc.load(writer);
System.xml.xmlelement udtxml=xmldoc.documentelement;
以下代碼是如何將XML反序列化回CLR用戶自定義類型。代碼如下:
Textreader reader=new string reader(udtxml.outerxml);
Pnt=(udtclientapp.point) serializer.deserialize(reader);
5 結(jié)束語
本文通過對Ajax的原理的分析提出如何有效的降低網(wǎng)絡(luò)負(fù)載、改善用戶體驗(yàn)等存在的問題。Ajax還很年輕,其本身還有許多的不足有待改進(jìn)。隨著Ajax應(yīng)用的普及, 更多Web開發(fā)人員參與到Ajax框架的研究當(dāng)中,相信不遠(yuǎn)的將來,Ajax必將成為Web開發(fā)中必不可少的一員。
參考文獻(xiàn):
[1] 游麗貞,等. Ajax引擎的原理和應(yīng)用[J]. 微計(jì)算機(jī)信息,2006,(22):2-3.
[2] 楊國瑞, 張思博. 基于AJAX的Web應(yīng)用架構(gòu)設(shè)計(jì)[J]. 現(xiàn)代電子技術(shù),2006,(15):24-26.
[3] 扎卡斯, 姆克皮克, 福西特. Ajax高級程序設(shè)計(jì)[M]. 北京:人民郵電出版社,2006:198-200.
收稿日期:2008-03-11
作者簡介:徐英娟(1980-),女,山東昌邑人,助教,碩士,研究方向:計(jì)算機(jī)應(yīng)用技術(shù)。