華 英 張曉艷
(蘇州市職業(yè)大學(xué),江蘇 蘇州 215014)
AJAX是Asynchronous JavaScript and XML的縮寫,確切地說是AJX,但這個(gè)詞不容易發(fā)音,Jesse Jame Garret在一次洗澡中想到了AJAX這個(gè)詞,于是開始用它來描述這套新技術(shù)。另有一種說法,Ajax是希臘神話中最高最強(qiáng)壯的,僅次于Achilles的第二勇士,而當(dāng)今的“桌面應(yīng)用戰(zhàn)爭(zhēng)”與特洛伊戰(zhàn)爭(zhēng)也有一定的相似性。不管哪種說法,從2005年2月AJAX一詞出現(xiàn)開始,注定會(huì)成為Web2.0浪潮中的熱點(diǎn)技術(shù),并使ASP.NET發(fā)生了革命性的變革。
傳統(tǒng)Web應(yīng)用程序是基于服務(wù)器的應(yīng)用,99%是服務(wù)器端代碼。當(dāng)客戶端用戶需要請(qǐng)求數(shù)據(jù)時(shí),發(fā)送HTTP請(qǐng)求到服務(wù)器,服務(wù)器接到請(qǐng)求進(jìn)行處理,處理完成后返回一個(gè)HTTP頁面到客戶端。服務(wù)器處理請(qǐng)求時(shí)客戶端進(jìn)入空閑等待狀態(tài),得到數(shù)據(jù)后,瀏覽器需要完全刷新。雖然Internet的速度變得越來越快,但大量的數(shù)據(jù)請(qǐng)求會(huì)使響應(yīng)速度非常緩慢,同時(shí)頁面的刷新必然會(huì)產(chǎn)生抖動(dòng)的感覺;同時(shí)請(qǐng)求的大量數(shù)據(jù)中,真正需要更新的數(shù)據(jù)很可能只是一小部分,無需更新的數(shù)據(jù)也被一起重新請(qǐng)求,大大降低了響應(yīng)速度。
AJAX的關(guān)鍵技術(shù)是異步,通過在服務(wù)器和客戶端之間增加一個(gè)中間層——AJAX引擎來實(shí)現(xiàn)異步化。AJAX引擎存在于客戶端,由它來完成許多原本在服務(wù)器上的數(shù)據(jù)驗(yàn)證和數(shù)據(jù)處理工作,只是將需要更新的數(shù)據(jù)向服務(wù)器提交請(qǐng)求,從而大大減輕服務(wù)器負(fù)擔(dān),其工作原理如圖1所示。用戶提交請(qǐng)求后,由AJAX引擎決定是提交給服務(wù)器還是自己處理,服務(wù)器對(duì)提交的數(shù)據(jù)處理完畢后,將結(jié)果返回給AJAX引擎,由AJAX引擎完成數(shù)據(jù)的解析工作,最終通過HTML和CSS技術(shù)呈現(xiàn)。區(qū)別于傳統(tǒng)Web應(yīng)用程序,AJAX更大程度地發(fā)揮了客戶端瀏覽器的潛力,減少瀏覽器和服務(wù)器之間的傳輸數(shù)據(jù)量,可以在不刷新整個(gè)頁面的前提下更新指定數(shù)據(jù),數(shù)據(jù)傳輸和數(shù)據(jù)處理可以同時(shí)進(jìn)行,減少瀏覽器的空閑等待時(shí)間,使Web應(yīng)用程序的性能和交互效果都得到大幅提高。
圖1 AJAX工作原理
AJAX不是一門新的編程語言,甚至不能說是一種新技術(shù),它實(shí)際上是將一系列成熟技術(shù)(有些甚至是人們認(rèn)為已經(jīng)過時(shí)的技術(shù)),有效地融合在一起,目的是為用戶創(chuàng)建更好更快以及交互性更強(qiáng)的Web應(yīng)用程序的一種新的開發(fā)方式。AJAX集成的多項(xiàng)技術(shù)關(guān)系如下:
(1)使用XHTML+CSS進(jìn)行頁面展示;使用DOM來完成動(dòng)態(tài)交互;使用JavaScript代碼把各種元素集成在一起。
(2)使用XML和XSLT進(jìn)行數(shù)據(jù)交換及相關(guān)操作,對(duì)數(shù)據(jù)處理的非專有性和平臺(tái)獨(dú)立性使得AJAX可以在使用業(yè)內(nèi)標(biāo)準(zhǔn)技術(shù)的任何平臺(tái)上運(yùn)行。重點(diǎn)強(qiáng)調(diào)客戶端的處理,盡可能地消除往返的數(shù)據(jù)交換,明顯地改善應(yīng)用程序的性能。
(3)使用XMLHttpRequest對(duì)象實(shí)現(xiàn)異步數(shù)據(jù)請(qǐng)求和檢索,請(qǐng)求頁面中的部分?jǐn)?shù)據(jù)。這樣不僅每次通過網(wǎng)絡(luò)請(qǐng)求的數(shù)據(jù)量比較少,減少數(shù)據(jù)響應(yīng)時(shí)間,而且在瀏覽器等待服務(wù)器響應(yīng)時(shí)可以繼續(xù)處理頁面的數(shù)據(jù)。
(4)JavaScript是眾多技術(shù)的粘合劑。AJAX利用了已經(jīng)成熟的腳本語言JavaScript,基本上每一款瀏覽器都支持它。同時(shí)AJAX的出現(xiàn)使被很多人認(rèn)為已經(jīng)過時(shí)的JavaScript再度成為編程人員的焦點(diǎn)。
AJAX可以使應(yīng)用程序快速執(zhí)行服務(wù)器的應(yīng)用。微軟開發(fā)了一套易于使用的AJAX控件庫,通過簡(jiǎn)單的拖放操作來實(shí)現(xiàn)AJAX的強(qiáng)大功能、快速響應(yīng)和靈活性。這意味著你即使不懂JavaScript和DHTML編程,也可以通過在IDE(如Visual Studio)中添加AJAX控件的方法來創(chuàng)建應(yīng)用程序,大大降低了開發(fā)者的技術(shù)門檻。微軟考慮到使用AJAX控件在頁面中集成標(biāo)準(zhǔn)的ASP.NET控件是件困難而繁瑣的工作,因此,使用ScriptManager控件來實(shí)現(xiàn)可靠的管理控制。當(dāng)使用IDE創(chuàng)建一個(gè)AJAX項(xiàng)目時(shí),IDE會(huì)自動(dòng)添加一個(gè)ScriptManager控件到頁面,同時(shí)在每一頁面添加如下聲明:
該控件僅在設(shè)計(jì)視圖中是可見的,只需確定其EnablePartialRendering屬性為True,再拖放一個(gè)或多個(gè)UpdatePanel控件到頁面,每個(gè)UpdatePanel運(yùn)行時(shí)單獨(dú)刷新,互不影響,通過這些UpdatePanel控件異步回傳。AJAX通常被應(yīng)用在表單驅(qū)動(dòng)的交互、深層次的級(jí)聯(lián)菜單、關(guān)鍵字提示或需要快速響應(yīng)的用戶與用戶間的交流。
AJAX的優(yōu)勢(shì)毋庸置疑,但也不是處處適用。AJAX不適用的情況有以下幾種:
(1)簡(jiǎn)單的表單
AJAX的優(yōu)勢(shì)是異步回傳信息,從而提高響應(yīng)速度。但對(duì)于部分簡(jiǎn)單表單,如登錄表單、評(píng)論留言表單,使用AJAX并不能對(duì)響應(yīng)產(chǎn)生多大的改善。
(2)完全更新的頁面
使用AJAX可以實(shí)現(xiàn)頁面的局部刷新,但是如果整個(gè)頁面都需要從服務(wù)器回傳信息,為什么不重新做一次服務(wù)器請(qǐng)求呢?
(3)需要保留歷史記錄的頁面
目前人們對(duì)于AJAX最主要的批評(píng)是有些使用了AJAX的頁面會(huì)破壞瀏覽器后退按鈕的功能,使用戶無法回到前一個(gè)頁面狀態(tài)。因此,對(duì)于需要查看上一次訪問頁面內(nèi)容的頁面,如搜索引擎,應(yīng)慎重使用AJAX。對(duì)于這一問題,通常采用隱藏的IFRAME來重現(xiàn)頁面上的變更。
AJAX改變傳統(tǒng)基于服務(wù)器的Web應(yīng)用,充分發(fā)揮客戶端的優(yōu)勢(shì),使Web應(yīng)用程序如桌面應(yīng)用程序般反應(yīng)靈敏。同時(shí)微軟公司為了更好地推動(dòng)AJAX的發(fā)展,吸取之前的教訓(xùn),沒有聲明其所有權(quán),并且開放了相關(guān)標(biāo)準(zhǔn),這給AJAX以更大更廣的發(fā)展空間。盡管在自身的安全性和瀏覽器的兼容性方面還有許多需要加強(qiáng)的地方,但這些都無法掩蓋AJAX使Web應(yīng)用更加自然快速響應(yīng),提升用戶瀏覽體驗(yàn)的光芒。Web開發(fā)人員根據(jù)具體業(yè)務(wù)需求,充分發(fā)揮異步的優(yōu)勢(shì),盡可能地回避其短處,必能創(chuàng)建出迷人的、富有交互性的站點(diǎn)和應(yīng)用程序。
[1]Jesse Liberty,Dan Hurwitz,Brain MacDonald.學(xué)習(xí)ASP.NET2.0和AJAX[M].北京:機(jī)械工業(yè)出版社,2008.
[2]孫啟良.Ajax技術(shù)與傳統(tǒng)Web應(yīng)用的比較[J].信息技術(shù),2010,(1):108-110.
[3]崔娜.Ajax技術(shù)及其實(shí)踐應(yīng)用[J].內(nèi)蒙古科技與經(jīng)濟(jì),2010,(4):114-121.
[4]葉小嶺,吳敏,張穎超.基于AJAX技術(shù)的WEB研究與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2010,26(1-3):222-226.
[5]岳建斌,張志斌.Ajax技術(shù)在Web中的應(yīng)用研究[J].電腦知識(shí)與技術(shù),2010,6(24):6698-6699.