資源描述:
《使用ajax技術(shù)構(gòu)建更優(yōu)秀的web應(yīng)用程序》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、你可以在站點(diǎn)http://www.google.com/webhp?complete=1&hl=en處看到一種良好的AJAX實(shí)踐技術(shù)展示。在此頁(yè)面中,如果你把任何字母輸入到文本框內(nèi),那么隨后就會(huì)出現(xiàn)一個(gè)下拉列表框,其中的內(nèi)容直接來(lái)自于服務(wù)器而不必提交整個(gè)頁(yè)面。AJAX的核心是XMLHttpRequest對(duì)象??蛻舳四軌蛟诤笈_(tái)檢索并直接提交XML數(shù)據(jù)。為了把檢索的XML數(shù)據(jù)轉(zhuǎn)換成可生成的HTML內(nèi)容,需要依賴于客戶端文檔對(duì)象模型(DOM)讀取XML文檔結(jié)點(diǎn)樹(shù)并且組成用戶看得見(jiàn)的HTML元素。其實(shí),AJ
2、AX并非象HTML,DHTML等一樣的單一技術(shù),它結(jié)合了不同的技術(shù): ·XMLHttpRequest對(duì)象被使用于與web服務(wù)器異步地交換數(shù)據(jù)?! ML被普遍用作把數(shù)據(jù)傳輸回服務(wù)器的格式(盡管任何格式都能使用,例如普通文本,HTML等)。 ·如果使用XML作為轉(zhuǎn)換格式,那么DOM通常與如JavaScript這樣的客戶端腳本語(yǔ)言一起使用來(lái)動(dòng)態(tài)地顯示和描述交互信息。 ·XHTML(或HTML),CSS用于標(biāo)記和信息格式化?! 《MLHttpRequest對(duì)象 從歷史來(lái)看,是微軟首先在其In
3、ternetExplorer5forWindows中以一個(gè)ActiveX對(duì)象形式實(shí)現(xiàn)了XMLHttpRequest對(duì)象。隨后,由Mozilla工程的工程師實(shí)現(xiàn)了Mozilla1.0(和Netscape7)的一種兼容的本機(jī)版本;而稍后,蘋果公司在其Safari1.2上也實(shí)現(xiàn)了相同的工作。其實(shí),在W3C標(biāo)準(zhǔn)的文檔對(duì)象模型(DOM)Level3加載與存儲(chǔ)規(guī)范中,也提到了類似的功能?,F(xiàn)在,它成為一種事實(shí)上的標(biāo)準(zhǔn),并開(kāi)始在以后發(fā)行的大多數(shù)瀏覽器中得到實(shí)現(xiàn)?! ?一)創(chuàng)建對(duì)象 XMLHttpRequest對(duì)象
4、的創(chuàng)建方式因?yàn)g覽器不同而有所不同。對(duì)于Safari和Mozilla來(lái)說(shuō),其創(chuàng)建方式如下所示:varreq=newXMLHttpRequest(); 對(duì)于InternetExplorer5.0+(指5.0及更高版本),則要把對(duì)象名傳遞到ActiveX構(gòu)造函數(shù)中:varreq=newActiveXObject("Microsoft.XMLHTTP"); 該對(duì)象的方法控制所有的操作,而其屬性存儲(chǔ)從服務(wù)器返回的各種數(shù)據(jù)片斷,例如XMLHttpObject.responseText包含從服務(wù)器返回的xml
5、或字符串值?! ?二)方法 在WindowsIE5.0+、Safari1.2和Mozila中支持的XMLHttpRequest對(duì)象的方法列舉如下:方法描述abort()取消當(dāng)前的請(qǐng)求。如果你在一個(gè)不處理請(qǐng)求(readyState0或4)的對(duì)象上調(diào)用它,"神秘的事情"發(fā)生了。getResponseHeader("headerLabel")返回單個(gè)頭標(biāo)簽的字符串值getAllResponseHeaders()以一個(gè)串形式返回完整的頭(標(biāo)簽和值)集合open("method","URL"[,asyncF
6、lag[,"userName"[,"password"]]])指派目標(biāo)URL、方法及一個(gè)懸掛請(qǐng)求的其它可選屬性send(content)傳輸請(qǐng)求。(可選擇地)其中可以加入可寄送的字符串或DOM對(duì)象數(shù)據(jù)setRequestHeader("label","value")把一個(gè)標(biāo)簽/值對(duì)指派給要發(fā)送的請(qǐng)求中的頭部 在上面的方法中,open和send方法是最重要的。下面,讓我們首先從應(yīng)用程序的觀點(diǎn)來(lái)討論open方法。varreq;………………………req=newActiveXObject("Microso
7、ft.XMLHTTP");……………varurl="AjaxServer.aspx?PubID="+ID;……………//打開(kāi)一個(gè)到URL的GET請(qǐng)求req.open("GET",url,true);//實(shí)際發(fā)送一個(gè)空請(qǐng)求req.send(null); 注意 在這個(gè)示例應(yīng)用程序中,AjaxClient.aspx頁(yè)面是用戶接口,AjaxServer.aspx則負(fù)責(zé)提供每一個(gè)用戶請(qǐng)求時(shí)的數(shù)據(jù)。要特別注意的是,AjaxServer.aspx頁(yè)面不應(yīng)該包含任何HTML。你可以測(cè)試一下如果頁(yè)面包含HTML將
8、會(huì)發(fā)生什么?! pen方法的第一個(gè)參數(shù)(見(jiàn)上面表格中的Open函數(shù))指示當(dāng)前操作為一個(gè)GET操作或是POST操作。在進(jìn)行簡(jiǎn)單的數(shù)據(jù)檢索時(shí),一般使用GET。當(dāng)向外傳輸?shù)臄?shù)據(jù)包大于512字節(jié)且操作包括服務(wù)器端活動(dòng)(如插入,更新等)時(shí),一般使用Post。接下來(lái),我們看一下"url"參數(shù)。這個(gè)參數(shù)可以是一個(gè)完整的url也可以是一個(gè)相對(duì)url。在上面例子中,使用的是相對(duì)的url。"asyncFlag"參數(shù)指示在執(zhí)行send方法后是否立即處理到來(lái)的腳本(這意味著不必等待是否有響