




已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【精品】Ajax總結(jié) AJAX-Asynchronous異步-javascript-XML ajaxAJAX全稱為“Asynchronous JavaScriptand XML”(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。 主要包含了以下幾種技術(shù)Ajax(Asynchronous JavaScript+XML)的定義基于web標(biāo)準(zhǔn)(standards-based presentation)XHTML+CSS的表示;使用DOM(Document ObjectModel)進(jìn)行動(dòng)態(tài)顯示及交互;使用XML和XSLT進(jìn)行數(shù)據(jù)交換及相關(guān)操作;使用XMLHttpRequest進(jìn)行異步數(shù)據(jù)查詢、檢索;使用JavaScript將所有的東西綁定在一起。 英文參見Ajax的提出者Jesse JamesGarrett的原文a類似于DHTML或LAMP,AJAX不是指一種單一的技術(shù),而是有機(jī)地利用了一系列相關(guān)的技術(shù)。 事實(shí)上,一些基于AJAX的“派生/合成”式(derivative/posite)的技術(shù)正在出現(xiàn),如“AFLAX”。 AJAX的應(yīng)用使用支持以上技術(shù)的web瀏覽器作為運(yùn)行平臺(tái)。 這些瀏覽器目前包括Mozilla、Firefox、Inter Explorer、Opera、Konqueror及Safari。 但是Opera不支持XSL格式對(duì)象,也不支持XSLT。 與傳統(tǒng)的web應(yīng)用比較傳統(tǒng)的web應(yīng)用允許用戶填寫表單(form),當(dāng)提交表單時(shí)就向web服務(wù)器發(fā)送一個(gè)請(qǐng)求。 服務(wù)器接收并處理傳來的表單,然後返回一個(gè)新的網(wǎng)頁。 這個(gè)做法浪費(fèi)了許多帶寬,因?yàn)樵谇搬醿蓚€(gè)頁面中的大部分HTML代碼往往是相同的。 由于每次應(yīng)用的交互都需要向服務(wù)器發(fā)送請(qǐng)求,應(yīng)用的響應(yīng)時(shí)間就依賴于服務(wù)器的響應(yīng)時(shí)間。 這導(dǎo)致了用戶界面的響應(yīng)比本地應(yīng)用慢得多。 與此不同,AJAX應(yīng)用可以僅向服務(wù)器發(fā)送并取回必需的數(shù)據(jù),它使用SOAP或其它一些基于XML的web service接口,并在客戶端采用JavaScript處理服務(wù)器的響應(yīng)。 因?yàn)樵诜?wù)器和瀏覽器之間交換的數(shù)據(jù)大量減少,結(jié)果我們就能看到響應(yīng)更快的應(yīng)用。 同時(shí)很多的處理工作可以在發(fā)出請(qǐng)求的客戶端機(jī)器上完成,所以Web服務(wù)器的處理時(shí)間也減少了。 Ajax應(yīng)用程序的優(yōu)勢(shì)在于1.通過異步模式,提升了用戶體驗(yàn)2.優(yōu)化了瀏覽器和服務(wù)器之間的傳輸,減少不必要的數(shù)據(jù)往返,減少了帶寬占用3.Ajax引擎在客戶端運(yùn)行,承擔(dān)了一部分本來由服務(wù)器承擔(dān)的工作,從而減少了大用戶量下的服務(wù)器負(fù)載。 Ajax的工作原理Ajax的核心是JavaScript對(duì)象XmlHttpRequest。 該對(duì)象在Inter Explorer5中首次引入,它是一種支持異步請(qǐng)求的技術(shù)。 簡(jiǎn)而言之,XmlHttpRequest使您可以使用JavaScript向服務(wù)器提出請(qǐng)求并處理響應(yīng),而不阻塞用戶。 在創(chuàng)建Web站點(diǎn)時(shí),在客戶端執(zhí)行屏幕更新為用戶提供了很大的靈活性。 下面是使用Ajax可以完成的功能動(dòng)態(tài)更新購物車的物品總數(shù),無需用戶單擊Update并等待服務(wù)器重新發(fā)送整個(gè)頁面。 提升站點(diǎn)的性能,這是通過減少從服務(wù)器下載的數(shù)據(jù)量而實(shí)現(xiàn)的。 例如,在某購物車頁面,當(dāng)更新籃子中的一項(xiàng)物品的數(shù)量時(shí),會(huì)重新載入整個(gè)頁面,這必須下載整個(gè)頁面的數(shù)據(jù)。 如果使用Ajax計(jì)算新的總量,服務(wù)器只會(huì)返回新的總量值,因此所需的帶寬僅為原來的百分之一。 消除了每次用戶輸入時(shí)的頁面刷新。 例如,在Ajax中,如果用戶在分頁列表上單擊Next,則服務(wù)器數(shù)據(jù)只刷新列表而不是整個(gè)頁面。 直接表格數(shù)據(jù),而不是要求用戶導(dǎo)航到新的頁面來數(shù)據(jù)。 對(duì)于Ajax,當(dāng)用戶單擊Edit時(shí),可以將靜態(tài)表格刷新為內(nèi)容可的表格。 用戶單擊Done之后,就可以發(fā)出一個(gè)Ajax請(qǐng)求來更新服務(wù)器,并刷新表格,使其包含靜態(tài)、只讀的數(shù)據(jù)。 一切皆有可能!但愿它能夠激發(fā)您開始開發(fā)自己的基于Ajax的站點(diǎn)。 然而,在開始之前,讓我們介紹一個(gè)現(xiàn)有的Web站點(diǎn),它遵循傳統(tǒng)的提交/等待/重新顯示的范例,我們還將討論Ajax如何提升用戶體驗(yàn)。 Ajax的工作原理相當(dāng)于在用戶和服務(wù)器之間加了個(gè)中間層,使用戶操作與服務(wù)器響應(yīng)異步化。 這樣把以前的一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利于客戶端閑置的處理能力來處理,減輕服務(wù)器和帶寬的負(fù)擔(dān),從而達(dá)到節(jié)約ISP的空間及帶寬租用成本的目的。 我們以兩個(gè)驗(yàn)證通行證帳號(hào)是否存在的例子來講述AJAX在實(shí)際中的應(yīng)用 (1)用文本字符串的方式返回服務(wù)器的響應(yīng)來驗(yàn)證網(wǎng)易通行證帳號(hào)是否存在; (2)以XMLDocument對(duì)象方式返回響應(yīng)來驗(yàn)證金山通行證帳號(hào)是否存在;首先,我們需要用JavaScript來創(chuàng)建XMLHttpRequest類向服務(wù)器發(fā)送一個(gè)請(qǐng)求,XMLHttpRequest類首先由Inter Explorer以ActiveX對(duì)象引入,被稱為XML。 后來MozillaNetscapeSafari和其他瀏覽器也提供了XMLHttpRequest類,不過它們創(chuàng)建XMLHttpRequest類的方法不同。 對(duì)于Inter Explorer瀏覽器,創(chuàng)建XMLHttpRequest方法如下xml_request=new ActiveXObject(Msxml2.XML.3.0);/3.0或4.0,5.0xml_request=new ActiveXObject(Msxml2.XML);xml_request=new ActiveXObject(Microsoft.XML);由于在不同Inter Explorer瀏覽器中XML版本可能不一致,為了更好的兼容不同版本的Inter Explorer瀏覽器,因此我們需要根據(jù)不同版本的Inter Explorer瀏覽器來創(chuàng)建XMLHttpRequest類,上面代碼就是根據(jù)不同的Inter Explorer瀏覽器創(chuàng)建XMLHttpRequest類的方法。 對(duì)于MozillaNetscapeSafari等瀏覽器,創(chuàng)建XMLHttpRequest方法如下xml_request=new XMLHttpRequest();如果服務(wù)器的響應(yīng)沒有XML mime-type header,某些Mozilla瀏覽器可能無法正常工作。 為了解決這個(gè)問題,如果服務(wù)器響應(yīng)的header不是text/xml,可以調(diào)用其它方法修改該header。 xml_request=new XMLHttpRequest();xml_request.overrideMimeType(text/xml);在實(shí)際應(yīng)用中,為了兼容多種不同版本的瀏覽器,一般將創(chuàng)建XMLHttpRequest類的方法寫成如下形式tryif(window.ActiveXObject)for(var i=5;i;i-)tryif(i=2)xml_request=new ActiveXObject(Microsoft.XML);elsexml_request=new ActiveXObject(Msxml2.XML.+i+.0);xml_request.setRequestHeader(Content-Type,text/xml);xml_request.setRequestHeader(Content-Type,gb2312);break;catch(e)xml_request=false;else if(window.XMLHttpRequest)xml_request=new XMLHttpRequest();if(xml_request.overrideMimeType)xml_request.overrideMimeType(text/xml);catch(e)xml_request=false;在定義了如何處理響應(yīng)后,就要發(fā)送請(qǐng)求了。 可以調(diào)用請(qǐng)求類的open()和send()方法,如下所示xml_request.open(GET,URL,true);xml_request.send(null);open()的第一個(gè)參數(shù)是請(qǐng)求方式GET,POST或任何服務(wù)器所支持的您想調(diào)用的方式。 按照規(guī)范,該參數(shù)要大寫;否則,某些瀏覽器(如Firefox)可能無法處理請(qǐng)求。 第二個(gè)參數(shù)是請(qǐng)求頁面的URL。 第三個(gè)參數(shù)設(shè)置請(qǐng)求是否為異步模式。 如果是TRUE,JavaScript函數(shù)將繼續(xù)執(zhí)行,而不等待服務(wù)器響應(yīng)。 這就是AJAX中的A。 用JavaScript來創(chuàng)建XMLHttpRequest類向服務(wù)器發(fā)送一個(gè)請(qǐng)求后,接下來要決定當(dāng)收到服務(wù)器的響應(yīng)后,需要做什么。 這需要告訴請(qǐng)求對(duì)象用哪一個(gè)JavaScript函數(shù)處理這個(gè)響應(yīng)。 可以將對(duì)象的onreadystatechange屬性設(shè)置為要使用的JavaScript的函數(shù)名,如下所示xml_request.onreadystatechange=FunctionName;FunctionName是用JavaScript創(chuàng)建的函數(shù)名,注意不要寫成FunctionName(),當(dāng)然我們也可以直接將JavaScript代碼創(chuàng)建在onreadystatechange之后,例如xml_request.onreadystatechange=function()/JavaScript代碼段;在這個(gè)函數(shù)中。 首先要檢查請(qǐng)求的狀態(tài)。 只有當(dāng)一個(gè)完整的服務(wù)器響應(yīng)已經(jīng)收到了,函數(shù)才可以處理該響應(yīng)。 XMLHttpRequest提供了readyState屬性來對(duì)服務(wù)器響應(yīng)進(jìn)行判斷。 readyState的取值如下0(未初始化)1(正在裝載)2(裝載完畢)3(交互中)4(完成)所以只有當(dāng)readyState=4時(shí),一個(gè)完整的服務(wù)器響應(yīng)已經(jīng)收到了,函數(shù)才可以處理該響應(yīng)。 具體代碼如下if(_request.readyState=4)/收到完整的服務(wù)器響應(yīng)else/沒有收到完整的服務(wù)器響應(yīng)當(dāng)readyState=4時(shí),一個(gè)完整的服務(wù)器響應(yīng)已經(jīng)收到了,接著,函數(shù)會(huì)檢查服務(wù)器響應(yīng)的狀態(tài)值。 完整的狀態(tài)取值可參見W3C文檔。 當(dāng)服務(wù)器響應(yīng)的值為200時(shí),表示狀態(tài)正常。 在檢查完請(qǐng)求的狀態(tài)值和響應(yīng)的狀態(tài)值后,就可以處理從服務(wù)器得到的數(shù)據(jù)了。 有兩種方式可以得到這些數(shù)據(jù) (1)以文本字符串的方式返回服務(wù)器的響應(yīng) (2)以XMLDocument對(duì)象方式返回響應(yīng)實(shí)例一用文本字符串的方式返回服務(wù)器的響應(yīng)來驗(yàn)證網(wǎng)易通行證帳號(hào)是否存在首先,我們登陸網(wǎng)易通行證注冊(cè)頁面,可以看到檢測(cè)用戶名是否存在是將用戶名提交給checkssn.jsp頁面進(jìn)行判斷,格式為reg.163./register/checkssn.jsp?username=用戶名根據(jù)上面講到的方法,我們可以利用AJAX技術(shù)對(duì)網(wǎng)易通行證用戶名進(jìn)行檢測(cè)第一步新建一個(gè)基于Xhtml標(biāo)準(zhǔn)的網(wǎng)頁,在區(qū)域插入Javascript函數(shù)如下function getXMLRequester()var xml_request=false;tryif(window.ActiveXObject)for(var i=5;i;i-)tryif(i=2)xml_request=new ActiveXObject(Microsoft.XML);elsexml_request=new ActiveXObject(Msxml2.XML.+i+.0);xml_request.setRequestHeader(Content-Type,text/xml);xml_request.setRequestHeader(Content-Type,gb2312);break;catch(e)xml_request=false;else if(window.XMLHttpRequest)xml_request=new XMLHttpRequest();if(xml_request.overrideMimeType)xml_request.overrideMimeType(text/xml);catch(e)xml_request=false;return xml_request;function IDRequest(n)/定義收到服務(wù)器的響應(yīng)后需要執(zhí)行的JavaScript函數(shù)url=n+document.getElementById(163id).value;/定義網(wǎng)址參數(shù)xml_request=getXMLRequester();/調(diào)用創(chuàng)建XMLHttpRequest的函數(shù)xml_request.onreadystatechange=doContents;/調(diào)用doContents函數(shù)xml_request.open(GET,url,true);xml_request.send(null);function doContents()if(xml_request.readyState=4)/收到完整的服務(wù)器響應(yīng)if(xml_request.status=200)/服務(wù)器響應(yīng)的值OK document.getElementById(message).innerHTML=xml_request.responseText;/將服務(wù)器返回的字符串寫到頁面中ID為message的區(qū)域elsealert(_request.status);在區(qū)域建立一個(gè)文本框,id為163id再建一個(gè)id為messsge的空白區(qū)域用來顯示返回字符串(也可以通過Javascript函數(shù)截取一部分字符串顯示)這樣,一個(gè)基于AJAX技術(shù)的用戶名檢測(cè)頁面就做好了,不過這個(gè)頁面將返回服務(wù)器響應(yīng)生成頁面的所有字符串,當(dāng)然還可以對(duì)返回的字符串進(jìn)行一些操作,便于應(yīng)用到不同的需要當(dāng)中。 實(shí)例二以XMLDocument對(duì)象方式返回響應(yīng)來驗(yàn)證金山通行證帳號(hào)是否存在在上面的例子中,當(dāng)服務(wù)器對(duì)請(qǐng)求的響應(yīng)被收到后,我們會(huì)調(diào)用請(qǐng)求對(duì)象的reponseText屬性。 該屬性包含了服務(wù)器返回響應(yīng)文件的內(nèi)容。 現(xiàn)在我們以XMLDocument對(duì)象方式返回響應(yīng),此時(shí)將不再需要reponseText屬性而使用responseXML屬性。 首先登陸金山通行證注冊(cè)頁面,我們發(fā)現(xiàn)金山通行證用戶名的檢測(cè)方式為pass.kingsoft./ksgweb/jsp/login/uid.jsp?uid=用戶名,并且返回XML數(shù)據(jù):isExistedUid-2當(dāng)result值為-1時(shí)表示此用戶名已被注冊(cè),當(dāng)result值為-2時(shí)表示此用戶名尚未注冊(cè),因此通過對(duì)result值的判斷可以知道用戶名是否被注冊(cè)。 對(duì)上例代碼進(jìn)行修改首
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 聯(lián)建房抵押分割協(xié)議書
- 畫室和物業(yè)合作協(xié)議書
- 資格審查業(yè)協(xié)議書
- 挖掘機(jī)拆伙協(xié)議書
- 抵押房銷售協(xié)議書
- 創(chuàng)意冰沙角行業(yè)跨境出海項(xiàng)目商業(yè)計(jì)劃書
- 離婚后再定協(xié)議書
- 二星級(jí)飯店住宿AI應(yīng)用企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力項(xiàng)目商業(yè)計(jì)劃書
- 衢江區(qū)線上推廣協(xié)議書
- 高清電子相冊(cè)軟件行業(yè)深度調(diào)研及發(fā)展項(xiàng)目商業(yè)計(jì)劃書
- (2024年)幼兒園營(yíng)養(yǎng)膳食
- 慕思廣告策略與實(shí)施報(bào)告完整版
- 第7章 顯微鏡下常見礦物特征
- 尿毒癥心衰的護(hù)理查房課件
- 人工智能在醫(yī)療領(lǐng)域的應(yīng)用
- 煙氣余熱回收工程施工組織設(shè)計(jì)
- 三次元MSA測(cè)量系統(tǒng)分析報(bào)告72121312
- 2023國(guó)家開放大學(xué)《經(jīng)濟(jì)學(xué)基礎(chǔ)》形考任務(wù)1-4參考答案
- 2021年中醫(yī)助理醫(yī)師考試實(shí)踐技能第一站:病例分析
- 專業(yè)合作社注銷清算報(bào)告范本
- 李勝利-胎兒心臟掃查方法65張課件
評(píng)論
0/150
提交評(píng)論