亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Ajax 技術(shù)研究及其Web應(yīng)用

        2010-09-21 11:30:50張鈴麗朱永杰
        關(guān)鍵詞:服務(wù)器端瀏覽器頁(yè)面

        張鈴麗,朱永杰

        (許昌學(xué)院,河南許昌461000)

        Ajax 技術(shù)研究及其Web應(yīng)用

        張鈴麗,朱永杰

        (許昌學(xué)院,河南許昌461000)

        Ajax技術(shù)是多種現(xiàn)有技術(shù)的結(jié)合,通過(guò)瀏覽器與服務(wù)器之間的異步通信,實(shí)現(xiàn)了無(wú)刷新更新頁(yè)面,提高了用戶的體驗(yàn).介紹了Ajax的技術(shù)原理、核心技術(shù)及工作流程,列舉了Ajax技術(shù)一些典型應(yīng)用,并指出Ajax的發(fā)展趨勢(shì).

        Ajax;XMLHttpRequest;J avaScript;DOM;XML

        隨著Web應(yīng)用技術(shù)的不斷發(fā)展,用戶已經(jīng)不滿足于像以前那樣填寫(xiě)表單,點(diǎn)擊“提交”按鈕,然后等待頁(yè)面跳轉(zhuǎn)的同步請(qǐng)求/響應(yīng)模式,用戶需要的是一種像任何桌面應(yīng)用程序那樣流暢、快捷和人性化的Web體驗(yàn).另外,大多數(shù)的網(wǎng)頁(yè)具有一些相同的內(nèi)容,尤其是同一網(wǎng)站中的網(wǎng)頁(yè).以往打開(kāi)這些網(wǎng)頁(yè)的時(shí)都是從服務(wù)器上全部下載到客戶端,這造成了巨大的服務(wù)器的負(fù)擔(dān),其實(shí)可以采用新的技術(shù)來(lái)避免重復(fù)內(nèi)容的請(qǐng)求.因而,Ajax技術(shù)應(yīng)運(yùn)而生并獲得廣泛應(yīng)用.

        Ajax是Asynchronous JavaScript and XML的縮寫(xiě),是由XMLHttpRequest、CSS、XML、DOM和JavaScript等技術(shù)結(jié)合而成的技術(shù)[1].它是基于JavaScript腳本和XML封裝數(shù)據(jù)的服務(wù)器和客戶端的異步交互技術(shù),能夠?qū)崿F(xiàn)瀏覽器與服務(wù)器的異步通信,使B/S結(jié)構(gòu)的應(yīng)用程序根據(jù)用戶輸入實(shí)現(xiàn)頁(yè)面實(shí)時(shí)、局部、快速刷新,模擬類(lèi)桌面應(yīng)用程序的效果,從而不僅節(jié)省了帶寬,而且顯著地提高用戶的體驗(yàn).

        1 Ajax的技術(shù)原理

        傳統(tǒng)的Web應(yīng)用采用同步交互方式,用戶發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器,服務(wù)器對(duì)其進(jìn)行處理后再返回一個(gè)新的Web頁(yè)面到瀏覽器.當(dāng)服務(wù)器正在處理的時(shí)候,用戶則一直處于等待狀態(tài),這樣,不會(huì)產(chǎn)生較好的體驗(yàn),而且完整頁(yè)面的傳輸會(huì)加重網(wǎng)絡(luò)負(fù)荷和服務(wù)器的工作量.

        Ajax是多種技術(shù)的結(jié)合,通過(guò)協(xié)作發(fā)揮各自的作用:使用XHTML和CSS標(biāo)準(zhǔn)化呈現(xiàn);使用DOM實(shí)現(xiàn)動(dòng)態(tài)顯示和交互;使用XML和XSTL進(jìn)行數(shù)據(jù)交換與處理;使用XMLHttp-Request對(duì)象進(jìn)行異步數(shù)據(jù)讀?。皇褂肑avaScript綁定和處理所有數(shù)據(jù)[1].

        圖1 傳統(tǒng)的Web模型

        圖2 Ajax Web模型

        Ajax采用異步交互方式,在用戶和服務(wù)器之間引入一個(gè)用JavaScript編寫(xiě)的Ajax引擎,用來(lái)代替用戶與服務(wù)器進(jìn)行交互[3].Ajax引擎是用JavaScript語(yǔ)言所編寫(xiě),且通常放在一個(gè)隱藏frame中,該引擎負(fù)責(zé)繪制用戶界面以及與服務(wù)器端通信[2].并不是所有的用戶請(qǐng)求都提交給服務(wù)器,像一些數(shù)據(jù)驗(yàn)證和數(shù)據(jù)處理等都交給Ajax引擎來(lái)做,只有確定需要從服務(wù)器讀取新數(shù)據(jù)時(shí)再由Ajax引擎向服務(wù)器提交請(qǐng)求,這樣,把以前的一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的處理能力來(lái)處理,減輕服務(wù)器和帶寬的負(fù)擔(dān).

        通過(guò)Ajax的技術(shù)原理可知,Ajax的最大特點(diǎn)是無(wú)刷新更新頁(yè)面,減少用戶心理和實(shí)際的等待時(shí)間;Ajax能夠按需讀取數(shù)據(jù),避免了在網(wǎng)絡(luò)上發(fā)送那些不發(fā)生改變的信息.但Ajax并不是完美的技術(shù),它也有自身的缺陷.瀏覽器兼容性差;前進(jìn)后退按鈕失效;一些手持設(shè)備現(xiàn)在還不能很好的支持Ajax;運(yùn)行效率不高;開(kāi)發(fā)難度加大;對(duì)搜索引擎不太友好.

        2 Ajax的核心技術(shù)

        Ajax的核心技術(shù)是XMLHttpRequest、JavaScript、CSS、DOM和XML.

        XMLHttpRequest是Ajax中最為核心的技術(shù),是XMLHttp組件的一個(gè)對(duì)象,最早是由微軟1995在IE5.0瀏覽器中率先推出的[4].它直接把數(shù)據(jù)傳到服務(wù)器上或者從服務(wù)器上讀取數(shù)據(jù),實(shí)現(xiàn)上述所介紹無(wú)刷新更新頁(yè)面的功能.與此對(duì)應(yīng),opera、Mozilla和safari等瀏覽器也實(shí)現(xiàn)了類(lèi)似的對(duì)象,XMLHttpRequest是目前該技術(shù)的正式名稱(chēng).XMLHttpRequest技術(shù)的出現(xiàn)打破了長(zhǎng)久以來(lái)的Web應(yīng)用開(kāi)發(fā)模式,這樣既減輕了服務(wù)器的負(fù)擔(dān)又加快了響應(yīng)速度、縮短了用戶等待時(shí)間,提升了用戶的體驗(yàn).

        JavaScript是一種基于對(duì)象和事件驅(qū)動(dòng)并具有較高安全性能的腳本語(yǔ)言,擁有自己的編程標(biāo)準(zhǔn),可以使用瀏覽器中的很多對(duì)象,包括XMLHttpRequest.在Ajax中,JavaScript通過(guò)調(diào)用XMLHttpRequest對(duì)象的方法和屬性與服務(wù)器端進(jìn)行數(shù)據(jù)交互,同時(shí)還可以利用DOM的API來(lái)解析從服務(wù)器端返回的XML數(shù)據(jù)和更新HTML頁(yè)面的內(nèi)容.由于JavaScript可以直接在客戶端進(jìn)行一些事件的處理,充分發(fā)揮了客戶端的運(yùn)算能力,所以就不需要將用戶所提交的簡(jiǎn)單請(qǐng)求傳到服務(wù)器處理再傳回來(lái),從而大大減輕了服務(wù)器的負(fù)擔(dān).JavaScript在客戶端的瀏覽器執(zhí)行,JavaScript代碼不應(yīng)太多,否則會(huì)使得客戶端運(yùn)行很慢,JavaScript應(yīng)用最多的就是表單驗(yàn)證[5].

        DOM是Document Object Model的縮寫(xiě),即文檔對(duì)象模型,為文檔提供了結(jié)構(gòu)化表示,并定義了如何通過(guò)腳本來(lái)訪問(wèn)文檔結(jié)構(gòu).它是個(gè)W3C規(guī)范,獨(dú)立于平臺(tái)和語(yǔ)言.DOM定義了如何表示和修改文檔所需要的對(duì)象,也定義了這些對(duì)象的行為和屬性,以及對(duì)象之間的關(guān)系.使用JavaScript可以訪問(wèn)文檔中的所有結(jié)點(diǎn),即所有對(duì)象.通過(guò)改變這些對(duì)象的屬性,用戶可以控制頁(yè)面的局部行為,將動(dòng)態(tài)獲取的數(shù)據(jù)插入到文檔中,實(shí)現(xiàn)局部刷新的目的.用戶還可以利用DOM模型增加和刪除文檔結(jié)點(diǎn),實(shí)現(xiàn)界面元素的動(dòng)態(tài)變化.在應(yīng)用Ajax技術(shù)時(shí),可以通過(guò)DOM來(lái)解析處理XML文檔和更新HTML頁(yè)面的內(nèi)容.

        XML是Extensible Markup Language的縮寫(xiě),即可擴(kuò)展標(biāo)記語(yǔ)言,可以規(guī)范地定義結(jié)構(gòu)化數(shù)據(jù),是網(wǎng)上傳輸?shù)臄?shù)據(jù)和文檔符合統(tǒng)一標(biāo)準(zhǔn)[6].它與HTML的性質(zhì)完全相同,更準(zhǔn)確的說(shuō),XML正是從HTML轉(zhuǎn)化而來(lái),目前,已經(jīng)成為Internet上數(shù)據(jù)和文檔傳輸?shù)臉?biāo)準(zhǔn).XML作用很大而且廣為接受,它為跨平臺(tái)、跨領(lǐng)域的應(yīng)用提供了一種通信手段.在應(yīng)用Ajax技術(shù)時(shí),XMLHttpRequest對(duì)象可以選擇使用XML作為與服務(wù)器端通信的數(shù)據(jù)格式.

        CSS是Web設(shè)計(jì)沿用已久的部分,同樣,在Ajax中,CSS擔(dān)當(dāng)著界面表現(xiàn)的重任,其重要性甚至超過(guò)了傳統(tǒng)的Web程序設(shè)計(jì).JavaScript通過(guò)XMLHttpRequest對(duì)象和服務(wù)器進(jìn)行交互,通常獲取的都是單純的數(shù)據(jù),不包括表現(xiàn)元素,如果此時(shí)使用JavaScript操作標(biāo)記的屬性來(lái)控制其外觀,會(huì)使代碼更加復(fù)雜且難以維護(hù),使用CSS則能很好的解決這些問(wèn)題.樣式表可以定義一些明顯的樣式元素,例如顏色、邊框、背景圖片、透明度和大小等.此外,CSS還可以定義元素相互之間的布局及簡(jiǎn)單的交互功能.圖3顯示了Ajax技術(shù)的核心技術(shù)如何配合工作來(lái)完成客戶端與服務(wù)器的異步操作.

        3 Ajax的工作流程

        Ajax實(shí)現(xiàn)異步請(qǐng)求/響應(yīng)模式步驟如下:

        3.1 創(chuàng)建XMLHttpRequest對(duì)象

        在使用XMLHttpRequest對(duì)象發(fā)送請(qǐng)求和處理響應(yīng)之前,必須先創(chuàng)建一個(gè)XMLHttpRequest對(duì)象.代碼如下:

        由于XMLHttpRequest不是一個(gè)W3C標(biāo)準(zhǔn),Internet Explorer把XMLHttpRequest實(shí)現(xiàn)為一個(gè)ActiveX對(duì)象,其他瀏覽器(如Firefox、Safari和Opera)把它實(shí)現(xiàn)為一個(gè)本地JavaScript對(duì)象.由于存在這些差別,JavaScript代碼中必須包含有關(guān)的邏輯,從而使用ActiveX技術(shù)或者使用本地JavaScript對(duì)象技術(shù)來(lái)創(chuàng)建XMLHttpRequest對(duì)象,以確保和瀏覽器兼容.

        3.2 發(fā)出HTTP請(qǐng)求和回調(diào)函數(shù)

        創(chuàng)建了XMLHttpRequest對(duì)象之后,就可以使用XMLHttpRequest對(duì)象中的open()方法和send()方法來(lái)向服務(wù)器發(fā)送請(qǐng)求,如下所示:

        XMLHttpRequest.open(strMethod,strUrl,boolAsync,strUser, strPassword);

        XMLHttpRequest.send(varBody);

        open()方法的strMethod參數(shù),字符串型,表示HTTP請(qǐng)求的方法,可以為POST、GET、PUT、HEAD、DELETE等;strUrl,字符串型,表示請(qǐng)求的URL地址,可以為絕對(duì)地址,也可以為相對(duì)地址;boolAsync,布爾型,指定此請(qǐng)求是否為異步方式,默認(rèn)為true,如果為false,表示此次請(qǐng)求為同步請(qǐng)求模式;strUser和strPassword,字符串型,可選參數(shù).

        open調(diào)用完畢后要調(diào)用send方法,send的參數(shù)var-Body,表示通過(guò)請(qǐng)求發(fā)送的數(shù)據(jù),variant型,可以是字符串,DOM樹(shù),或其它數(shù)據(jù)流.當(dāng)使用GET方法提交請(qǐng)求,或者沒(méi)有需要發(fā)送的數(shù)據(jù)時(shí),可以send(nulll)或直接省略參數(shù)send ().

        在發(fā)送請(qǐng)求后,還要指定回調(diào)函數(shù).創(chuàng)建XMLHttpRequest對(duì)象向服務(wù)器發(fā)送一個(gè)HTTP請(qǐng)求后,要決定當(dāng)收到服務(wù)器的響應(yīng)后,需要做什么.這需要告訴XMLHttpRequest對(duì)象用哪一個(gè)函數(shù)來(lái)處理這個(gè)響應(yīng).通常把該處理函數(shù)叫做回調(diào)函數(shù).XMLHttpRequest對(duì)象提供了onready-statechange屬性來(lái)指定回調(diào)函數(shù),例如:

        XMLHttpRequest.onreadystatechange=Call-BackFunction-Name;

        也可以用JavaScript即時(shí)定義函數(shù)的方式定義響應(yīng)函數(shù),例如:

        XMLHttpRequest.onreadystatechange=funct-ion(){};

        3.3 處理服務(wù)器返回的信息

        當(dāng)XMLHttpRequest對(duì)象的readyState發(fā)生變化時(shí)將觸發(fā)readystatechange事件.通過(guò)將處理函數(shù)賦給XMLHttpRequest對(duì)象的onready-statechange屬性,可以為該事件指定事件處理函數(shù).如果readyState值是4,代表服務(wù)器已經(jīng)返回所有的信息,可以開(kāi)始處理信息并更新頁(yè)面內(nèi)容.服務(wù)器返回信息后,通過(guò)訪問(wèn)XMLHttp-Request對(duì)象的status屬性來(lái)獲取當(dāng)前HTTP請(qǐng)求的狀態(tài),以此來(lái)判斷請(qǐng)求是否成功.其中,200代表頁(yè)面正常.

        在XMLHttpRequest對(duì)象完成一次HTTP請(qǐng)求后,可以通過(guò)訪問(wèn)其responseText或response-XML屬性來(lái)獲取返回的數(shù)據(jù).

        responseText將返回的數(shù)據(jù)作為字符串格式返回,responseXML將返回的數(shù)據(jù)格式化為XML文檔返回.

        以XML文檔方式返回的數(shù)據(jù),需要使用DOM來(lái)解析,從中提取響應(yīng)數(shù)據(jù),DOM也提供了對(duì)頁(yè)面中各個(gè)對(duì)象的讀寫(xiě)支持,通過(guò)DOM可以方便地完成對(duì)頁(yè)面內(nèi)容的更新.

        3.4 取消當(dāng)前請(qǐng)求

        如果需取消一個(gè)正在進(jìn)行中的請(qǐng)求,可以調(diào)用XMLHttpRequest對(duì)象的abort方法,如下所示:

        XMLHttpRequest.abort();

        調(diào)用后該方法后,XMLHttpRequest對(duì)象重新回到未初始化狀態(tài).

        4 Ajax技術(shù)的應(yīng)用

        AJAX的技術(shù)特點(diǎn)在于異步交互、動(dòng)態(tài)更新Web頁(yè)面,因此它的適用范圍是交互較多、頻繁讀取數(shù)據(jù)的Web應(yīng)用. Ajax主要可以用于數(shù)據(jù)驗(yàn)證、級(jí)聯(lián)菜單和自動(dòng)更新頁(yè)面等.

        在填寫(xiě)表單時(shí),有些數(shù)據(jù)需要保證唯一性,如在用戶注冊(cè)的過(guò)程中,需要檢驗(yàn)待注冊(cè)的用戶名是否唯一.傳統(tǒng)的方法是采用window.open的彈出窗口或window.showModalDialog的對(duì)話框,兩者都需要打開(kāi)窗口.而Ajax采用異步方式直接將參數(shù)提交至服務(wù)器,用window.alert將服務(wù)器返回的校驗(yàn)信息顯示出來(lái),這樣可以快速完成驗(yàn)證又不加重服務(wù)器的負(fù)擔(dān).

        以往在網(wǎng)頁(yè)中應(yīng)用級(jí)聯(lián)菜單時(shí),一次性地將級(jí)聯(lián)菜單的所有數(shù)據(jù)全部讀出并寫(xiě)入數(shù)組,然后根據(jù)用戶的操作用JavaScript來(lái)控制它的子集項(xiàng)目的呈現(xiàn).這種方法避免了頁(yè)面的刷新,但由于用戶對(duì)于菜單項(xiàng)的單擊是不均勻的,在菜單結(jié)構(gòu)復(fù)雜數(shù)據(jù)量大的時(shí)候會(huì)產(chǎn)生相當(dāng)大的冗余,造成資源的浪費(fèi).應(yīng)用Ajax技術(shù)之后,在初始化頁(yè)面時(shí)只讀出它的第一級(jí)的所有數(shù)據(jù)并顯示,在用戶操作一級(jí)菜單中的某一項(xiàng)時(shí),會(huì)通過(guò)Ajax向后臺(tái)請(qǐng)求該菜單項(xiàng)所屬的二級(jí)子菜單的所有數(shù)據(jù),以此類(lèi)推……這樣,減少了數(shù)據(jù)下載總量,在真正意義上實(shí)現(xiàn)“按需取數(shù)據(jù)”局部更新頁(yè)面.

        在有些Web應(yīng)用中數(shù)據(jù)更新速度很快,如聊天室的聊天記錄等等.在Ajax出現(xiàn)之前,用戶想看到最新消息必須手動(dòng)刷新或者利用頁(yè)面提供的定時(shí)刷新功能.而Ajax在頁(yè)面加載后會(huì)通過(guò)引擎輪詢(xún)服務(wù)器,查看是否有需要更新的內(nèi)容.若有,只需將新數(shù)據(jù)下載,在頁(yè)面上進(jìn)行動(dòng)態(tài)更新并給出提示.這樣既避免用戶手工刷新頁(yè)面的不便,也不會(huì)因頻繁刷新而造成資源浪費(fèi).

        然而Ajax不是萬(wàn)能的,只有在適宜的場(chǎng)合才能充分發(fā)揮長(zhǎng)處,改善系統(tǒng)性能和用戶體驗(yàn).

        5 結(jié)語(yǔ)

        Ajax技術(shù)是多種技術(shù)的結(jié)合,實(shí)現(xiàn)了無(wú)刷新更新頁(yè)面;它將原來(lái)一些服務(wù)器端的工作利用客戶端閑置的能力來(lái)處理,從而減輕服務(wù)器的負(fù)擔(dān),減少用戶的等待時(shí)間,提升了用戶體驗(yàn).通過(guò)運(yùn)用Ajax技術(shù),可以構(gòu)建更為動(dòng)態(tài)和響應(yīng)更靈敏的Web引用程序,用戶體驗(yàn)逐步接近桌面應(yīng)用.隨著Ajax技術(shù)的成熟和各種瀏覽器的支持,Ajax技術(shù)將會(huì)得到更加廣泛的應(yīng)用.

        〔1〕Asleson R.Ajax基礎(chǔ)教程[M].北京:人民郵電出版社, 2006.

        〔2〕游麗貞.Ajax引擎的原理與應(yīng)用[J].微計(jì)算機(jī)信息,2006,22 (2):506-206.

        〔3〕譚力,楊宗源,謝瑾奎.Ajax技術(shù)的數(shù)據(jù)響應(yīng)優(yōu)化[J].計(jì)算機(jī)工程,2010,36(7):52-54.

        〔4〕王凈,占凱.Ajax技術(shù)和Web應(yīng)用[J].艦船電子工程,2009,29(11):127-131.

        〔5〕奈名高,王程根,鄧浩,李祎.基于Web2.0的Ajax技術(shù)的開(kāi)發(fā)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007,17(5):203-206.

        〔6〕吳吉義,平玲娣.Web2.0主流應(yīng)用技術(shù)——Ajax性能分析[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(8):1913-1914,1945.

        TP393

        A

        1673-260X(2010)11-0020-03

        猜你喜歡
        服務(wù)器端瀏覽器頁(yè)面
        大狗熊在睡覺(jué)
        刷新生活的頁(yè)面
        反瀏覽器指紋追蹤
        電子制作(2019年10期)2019-06-17 11:45:14
        淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
        成功(2018年10期)2018-03-26 02:56:14
        環(huán)球?yàn)g覽器
        再見(jiàn),那些年我們嘲笑過(guò)的IE瀏覽器
        在Windows中安裝OpenVPN
        網(wǎng)頁(yè)防篡改中分布式文件同步復(fù)制系統(tǒng)
        同一Word文檔 縱橫頁(yè)面并存
        淺析ASP.NET頁(yè)面導(dǎo)航技術(shù)
        无码精品国产午夜| 国产真实夫妇视频| 男女男在线精品网站免费观看| 91热爆在线精品| 国产一区二区三区亚洲| 丁香婷婷激情综合俺也去| 午夜丰满少妇性开放视频| 日本高清一区二区不卡视频| 国产偷闻女邻居av在线观看| 亚洲国产精品成人久久| 国产av无码专区亚洲av琪琪| 蜜桃在线播放免费一区二区三区 | 婷婷色精品一区二区激情| 欧美性猛交xxxx三人| 黑人巨大videos极度另类| 亚洲国产高清在线视频| 在线观看国产激情视频| 99精品国产一区二区三区不卡| 尤物99国产成人精品视频| av东京热一区二区三区| 一区二区三区国产在线视频| 毛片内射久久久一区| 产国语一级特黄aa大片| 日韩精品自拍一区二区| 帅小伙自慰videogay男男| 亚洲欧洲日产国码高潮αv| 中文人妻av大区中文不卡| 国产av在线观看一区二区三区| 男女做爰猛烈啪啪吃奶动| 二区在线视频| 青青草精品在线免费观看 | 亚洲一区二区三区在线激情| 亚洲欧洲国产码专区在线观看| 中文亚洲av片在线观看不卡| 熟女少妇av免费观看| 青青草小视频在线播放| 人妻少妇久久中文字幕一区二区| 精品亚洲欧美高清不卡高清| 日本黄色一区二区三区| 国产国产人免费人成免费视频| 国产精品久免费的黄网站|