AJAX基礎(chǔ)教程及初步使用_Xml教程
推薦:如何讓W(xué)ebServer返回指定XML內(nèi)容 通過(guò)創(chuàng)建WEBServer代理可以當(dāng)作本地類(lèi)使用,但能不能返回指定的XML呢?比如通過(guò)checkpass服務(wù)檢測(cè)帳號(hào)和密碼之后要返回該用戶(hù)擁有的權(quán)限列表。怎么實(shí)現(xiàn)呢? ASP.NET Web服務(wù)支持在公
什么是 AJAX?
AJAX (異步 JavaScript 和 XML) 是個(gè)新產(chǎn)生的術(shù)語(yǔ),專(zhuān)為描述JavaScript的兩項(xiàng)強(qiáng)大性能.這兩項(xiàng)性能在多年來(lái)一直被網(wǎng)絡(luò)開(kāi)發(fā)者所忽略,直到最近Gmail,Google suggest和google Maps的橫空出世才使人們開(kāi)始意識(shí)到其重要性。
這兩項(xiàng)被忽視的性能是:
無(wú)需重新裝載整個(gè)頁(yè)面便能向服務(wù)器發(fā)送請(qǐng)求。
對(duì)XML文檔的解析和處理。
步驟 1 – "請(qǐng)!" --- 如何發(fā)送一個(gè)HTTP請(qǐng)求
為了用JavaScript向服務(wù)器發(fā)送一個(gè)HTTP請(qǐng)求,需要一個(gè)具備這種功能的類(lèi)實(shí)例. 這樣的類(lèi)首先由Internet Explorer以ActiveX對(duì)象引入,被稱(chēng)為XMLHTTP。后來(lái)Mozilla,Safari 和其他瀏覽器紛紛仿效,提供了XMLHttpRequest類(lèi),它支持微軟的ActiveX對(duì)象所提供的方法和屬性。
因此,為了創(chuàng)建一個(gè)跨瀏覽器的這樣的類(lèi)實(shí)例(對(duì)象),可以應(yīng)用如下代碼:
以下為引用的內(nèi)容: if (window.XMLHttpRequest) { // Mozilla,Safari,... http_request = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE http_request = new ActiveXObject("Microsoft.XMLHTTP"); } |
(上例對(duì)代碼做了一定簡(jiǎn)化,這是為了解釋如何創(chuàng)建XMLHTTP類(lèi)實(shí)例. 實(shí)際的代碼實(shí)例可參閱本篇步驟3.)
如果服務(wù)器的響應(yīng)沒(méi)有XML mime-type header,某些Mozilla瀏覽器可能無(wú)法正常工作. 為了解決這個(gè)問(wèn)題,如果服務(wù)器響應(yīng)的header不是text/xml,可以調(diào)用其它方法修改該header.
http_request = new XMLHttpRequest();
http_request.overrideMimeType('text/xml');
接下來(lái)要決定當(dāng)收到服務(wù)器的響應(yīng)后,需要做什么.這需要告訴HTTP請(qǐng)求對(duì)象用哪一個(gè)JavaScript函數(shù)處理這個(gè)響應(yīng).可以將對(duì)象的onreadystatechange屬性設(shè)置為要使用的JavaScript的函數(shù)名,如下所示:
http_request.onreadystatechange = nameOfTheFunction;
注意:在函數(shù)名后沒(méi)有括號(hào),也無(wú)需傳遞參數(shù).另外還有一種方法,可以在扉頁(yè)(fly)中定義函數(shù)及其對(duì)響應(yīng)要采取的行為,如下所示:
以下為引用的內(nèi)容: http_request.onreadystatechange = function(){ // do the thing }; |
在定義了如何處理響應(yīng)后,就要發(fā)送請(qǐng)求了.可以調(diào)用HTTP請(qǐng)求類(lèi)的open()和send()方法,如下所示:
http_request.open('GET','http://www.example.org/some.file',true);
http_request.send(null);
open()的第一個(gè)參數(shù)是HTTP請(qǐng)求方式 – GET,POST,HEAD 或任何服務(wù)器所支持的您想調(diào)用的方式. 按照HTTP規(guī)范,該參數(shù)要大寫(xiě);否則,某些瀏覽器(如Firefox)可能無(wú)法處理請(qǐng)求.有關(guān)HTTP請(qǐng)求方法的詳細(xì)信息可參考http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html W3C specs。
第二個(gè)參數(shù)是請(qǐng)求頁(yè)面的URL.由于自身安全特性的限制,該頁(yè)面不能為第三方域名的頁(yè)面.同時(shí)一定要保證在所有的頁(yè)面中都使用準(zhǔn)確的域名,否則調(diào)用open()會(huì)得到"permission denied"的錯(cuò)誤提示.一個(gè)常見(jiàn)的錯(cuò)誤是訪(fǎng)問(wèn)站點(diǎn)時(shí)使用domain.tld,而當(dāng)請(qǐng)求頁(yè)面時(shí),卻使用www.domain.tld.
第三個(gè)參數(shù)設(shè)置請(qǐng)求是否為異步模式.如果是TRUE,JavaScript函數(shù)將繼續(xù)執(zhí)行,而不等待服務(wù)器響應(yīng).這就是"AJAX"中的"A".
如果第一個(gè)參數(shù)是"POST",send()方法的參數(shù)可以是任何想送給服務(wù)器的數(shù)據(jù). 這時(shí)數(shù)據(jù)要以字符串的形式送給服務(wù)器,如下所示:
name=value&anothername=othervalue&so=on
步驟 2 – "收到!" --- 處理服務(wù)器的響應(yīng)
當(dāng)發(fā)送請(qǐng)求時(shí),要提供指定處理響應(yīng)的JavaScript函數(shù)名。
http_request.onreadystatechange = nameOfTheFunction;
我們來(lái)看看這個(gè)函數(shù)的功能是什么.首先函數(shù)會(huì)檢查請(qǐng)求的狀態(tài).如果狀態(tài)值是4,就意味著一個(gè)完整的服務(wù)器響應(yīng)已經(jīng)收到了,您將可以處理該響應(yīng)。
以下為引用的內(nèi)容: if (http_request.readyState == 4) { // everything is good,the response is received } else { // still not ready } |
readyState的取值如下:
0 (未初始化)
1 (正在裝載)
2 (裝載完畢)
3 (交互中)
4 (完成)
接著,函數(shù)會(huì)檢查HTTP服務(wù)器響應(yīng)的狀態(tài)值. 完整的狀態(tài)取值可參見(jiàn) W3C site. 我們著重看值為200 OK的響應(yīng)。
以下為引用的內(nèi)容: if (http_request.status == 200) { // perfect! } else { // there was a problem with the request, // for example the response may be a 404 (Not Found) // or 500 (Internal Server Error) response codes } |
在檢查完請(qǐng)求的狀態(tài)值和響應(yīng)的HTTP狀態(tài)值后,您就可以處理從服務(wù)器得到的數(shù)據(jù)了.有兩種方式可以得到這些數(shù)據(jù):
http_request.responseText – 以文本字符串的方式返回服務(wù)器的響應(yīng)
http_request.responseXML – 以XMLDocument對(duì)象方式返回響應(yīng).處理XMLDocument對(duì)象可以用JavaScript DOM函數(shù)
步驟 3 – "萬(wàn)事俱備!" - 簡(jiǎn)單實(shí)例
我們現(xiàn)在將整個(gè)過(guò)程完整地做一次,發(fā)送一個(gè)簡(jiǎn)單的HTTP請(qǐng)求. 我們用JavaScript請(qǐng)求一個(gè)HTML文件,test.html,文件的文本內(nèi)容為"I'm a test.".然后我們"alert()"test.html文件的內(nèi)容。
以下為引用的內(nèi)容: <script type="text/javascript" language="javascript"> http_request = false; if (window.XMLHttpRequest) { // Mozilla,Safari,... if (!http_request) { } function alertContents() { if (http_request.readyState == 4) { } |
本例中:
用戶(hù)點(diǎn)擊瀏覽器上的"請(qǐng)求"鏈接;
接著函數(shù)makeRequest()將被調(diào)用.其參數(shù) – HTML文件test.html在同一目錄下;
這樣就發(fā)起了一個(gè)請(qǐng)求.onreadystatechange的執(zhí)行結(jié)果會(huì)被傳送給alertContents();
alertContents()將檢查服務(wù)器的響應(yīng)是否成功地收到,如果是,就會(huì)"alert()"test.html文件的內(nèi)容
步驟 4 – "X-文檔" --- 處理XML響應(yīng)
在前面的例子中,當(dāng)服務(wù)器對(duì)HTTP請(qǐng)求的響應(yīng)被收到后,我們會(huì)調(diào)用請(qǐng)求對(duì)象的reponseText屬性.該屬性包含了test.html文件的內(nèi)容.現(xiàn)在我們來(lái)試試responseXML屬性。
首先,我們新建一個(gè)有效的XML文件,后面我們將使用這個(gè)文件.該文件(test.xml)源代碼如下所示:
以下為引用的內(nèi)容: <?xml version="1.0" ?> <root> I'm a test. </root> |
在該腳本中,我們只需修改請(qǐng)求部分:
...
onclick="makeRequest('test.xml')">
...
接著,在alertContents()中,我們將alert()的代碼alert(http_request.responseText);換成:
var xmldoc = http_request.responseXML;
var root_node = xmldoc.getElementsByTagName('root').item(0);
alert(root_node.firstChild.data);
這里,我們使用了responseXML提供的XMLDocument對(duì)象并用DOM方法獲取存于XML文件中的內(nèi)容。
Ajax初步使用方法
Ajax定義為“Asynchronous JavaScript XML”的簡(jiǎn)稱(chēng),也就是異步的JavaScript和XML處理。從原理上看,主要是Ajax可以通過(guò)調(diào)用HttpRequest實(shí)現(xiàn)與服務(wù)器的異步通訊,并最終在網(wǎng)頁(yè)中實(shí)現(xiàn)豐富友好的用戶(hù)界面。
Ajax使用初步,配置步驟:
1、把Ajax.dll copy到應(yīng)用系統(tǒng)bin目錄下,然后在工程引用中引用Ajax.dll。
2、配置web.config,添加如下信息
以下為引用的內(nèi)容: <httpHandlers> |
然后運(yùn)行就可以了,實(shí)現(xiàn)效果:在第一個(gè)textbox中輸入內(nèi)容,點(diǎn)擊button,就把內(nèi)容顯示到第二textbox中。這只是一個(gè)簡(jiǎn)單的示例,還可以修改調(diào)用方法,從數(shù)據(jù)庫(kù)讀取以及更復(fù)雜的操作。
分享:XML編程實(shí)例:用ASP XML打造留言本一、讀者指引 讀者指引幫助你掌握本文的梗概。以免你看了大半才明白這編文章不適合你,給你造成視覺(jué)污染。 如果你正在用ASP XML寫(xiě)一些程序,或者你正在學(xué)XML那就值得一看。 閱讀本文須具
- xml創(chuàng)建節(jié)點(diǎn)(根節(jié)點(diǎn)、子節(jié)點(diǎn))
- WML開(kāi)發(fā)教程之 WAP網(wǎng)站服務(wù)器配置方法
- WMLScript的語(yǔ)法基礎(chǔ)
- 收集的WML Script標(biāo)準(zhǔn)函數(shù)庫(kù)
- WML教程之文本框控件Input
- 無(wú)線(xiàn)標(biāo)記語(yǔ)言(WML)基礎(chǔ)之WMLScript 基礎(chǔ)
- xml文件的結(jié)構(gòu)解讀
- 關(guān)于XSL - XSL教程
- 選擇模式 - XSL教程 - 2
- XPath入門(mén) - XSL教程 - 3
- 匹配模式 - XSL教程 - 4
- 測(cè)試模式 - XSL教程 - 5
- 相關(guān)鏈接:
- 教程說(shuō)明:
Xml教程-AJAX基礎(chǔ)教程及初步使用。