服務(wù)器XMLHTTP(Server XMLHTTP in ASP)基礎(chǔ)知識(shí)
更新時(shí)間:2010年08月04日 13:05:02 作者:
幾年很流行 Ajax,而 Ajax 的本質(zhì)就是 XMLHttpRequest,是客戶端 XMLHttpRequest 對(duì)象的使用。
相對(duì)于 Ajax,服務(wù)端 XMLHTTP 就是在服務(wù)端使用 XMLHttpRequest 對(duì)象了。雖然說(shuō),在服務(wù)端使用異步請(qǐng)求是比較不方便的,但是做為可以服務(wù)端發(fā)送 HTTP 請(qǐng)求的組件,學(xué)習(xí)一下也是沒(méi)有壞處的。
這里,我講的是在 ASP 環(huán)境中使用服務(wù)端 XMLHttpRequest,并以 JScript 做為演示代碼的語(yǔ)言,因此,你需要了解 ASP 以及 JScript。
服務(wù)端 XMLHTTP,通常會(huì)用在獲取遠(yuǎn)程主機(jī)的網(wǎng)頁(yè)或者其他內(nèi)容,新聞聚合系統(tǒng)一般就是使用服務(wù)端 XMLHTTP 對(duì)象來(lái)獲取要聚合的 Feed 的內(nèi)容,然后使用 XMLDOM 對(duì)象來(lái)分析 Feed 的內(nèi)容,取出新聞的標(biāo)題、作者、內(nèi)容等信息,再存在數(shù)據(jù)庫(kù)中,然后將若干個(gè)數(shù)據(jù)源的新聞一起顯示在一起。抓蝦就是這樣一個(gè)新聞聚合器,但是它不是用 ASP 寫的就是了 :)
在 ASP 中,我們可以用以下代碼來(lái)創(chuàng)建一個(gè) ServerXMLHTTP 對(duì)象,而這個(gè)對(duì)象,就是我們?cè)诜?wù)端進(jìn)行一切操作的基礎(chǔ)。
var xmlhttp = new ActiveXObject("MSXML2.ServerXMLHTTP.5.0");
首先來(lái)了解一下 ServerXMLHTTP 對(duì)象有哪些比較有用的方法:
1. abort 這個(gè)方法用于取消 XMLHTTP 的請(qǐng)求。如果 XMLHTTP 對(duì)象以異步方式發(fā)送請(qǐng)求,如果到達(dá)一定的時(shí)間請(qǐng)求仍然沒(méi)有返回,就可以使用這個(gè)方法來(lái)取消請(qǐng)求。
2. getAllResponseHeaders 這個(gè)方法的返回值是一個(gè)字符串,相當(dāng)于 HTTP 請(qǐng)求的頭部去掉了請(qǐng)求方法、URI和協(xié)議版本信息。
3. getResponseHeader 這個(gè)方法用來(lái)獲取指定頭部信息,比較有用的就是可以用來(lái)獲取返回?cái)?shù)據(jù)的 Content-Type、Referer 等。
4. open 使用指定的請(qǐng)求方法、URI和同步方式以及認(rèn)證信息等初始化一個(gè)請(qǐng)求。
5. send 發(fā)送 HTTP 請(qǐng)求,等待接收響應(yīng)數(shù)據(jù),注意,如果是以同步方式發(fā)送請(qǐng)求,send方法調(diào)用后不會(huì)立即返回,而是等到請(qǐng)求完成后才會(huì)返回,而以異步方法請(qǐng)求時(shí),則會(huì)立即返回。另外,send方法帶有一個(gè)可選參數(shù)body,表示要發(fā)送的數(shù)據(jù),這在使用 POST 方法時(shí)比較有用。
6. setTimeout 設(shè)置 ServerXMLHTTP 對(duì)象的 4 個(gè)超時(shí)時(shí)間,分別是:域名解析、連接服務(wù)器、發(fā)送數(shù)據(jù)、接收響應(yīng)??梢酝ㄟ^(guò)設(shè)置相應(yīng)的超時(shí)時(shí)間來(lái)控制 ServerXMLHTTP 對(duì)象,以免 ServerXMLHTTP 不能及時(shí)返回而造成程序停止響應(yīng)。
7. setRequestHeader 設(shè)置請(qǐng)求的 Header,在客戶端 XMLHttpRequest中,通常用來(lái)設(shè)置請(qǐng)求的數(shù)據(jù)類型,或者標(biāo)識(shí)請(qǐng)求的方法等等,例如 jquery 會(huì)增加頭部標(biāo)識(shí) X-Request-With,表示請(qǐng)求是從 XMLHttpRequest 對(duì)象發(fā)出,以方便服務(wù)端做出相應(yīng)的動(dòng)作。
8. waitForResponse 在使用異步方式發(fā)送請(qǐng)求時(shí),可以用這個(gè)方法來(lái)控制請(qǐng)求的進(jìn)程。在服務(wù)端腳本中,不可以像客戶端那樣直接使用回調(diào)函數(shù)來(lái)控制異步請(qǐng)求,也沒(méi)有相應(yīng)的函數(shù)來(lái)使用程序休眠一定的時(shí)間,因此,為了等待請(qǐng)求返回,我們可以使用這個(gè)方法來(lái)等待一定時(shí)間。
另外,還有其他一些方法,如 getOption、setOption、setProxy 等,這些方法用得比較少,因此這里不再介紹,需要了解的朋友可以查閱 MSDN。
接下來(lái),再看看 ServerXMLHTTP 對(duì)象的屬性:
1. onreadystatechange XMLHTTP 對(duì)象狀態(tài)改變時(shí)的回調(diào)函數(shù),這個(gè)屬性為異步操作奠定了一個(gè)基礎(chǔ),可以讓程序在不用查詢 XMLHTTP 對(duì)象狀態(tài)的情況獲知 XMLHTTP 操作是否已經(jīng)完成。
2. readyState XMLHTTP 對(duì)象狀態(tài),有 5 個(gè)值,從 0 到 4,分別代表的意思是:
0 - 未初始化,剛使用 new ActiveXObject("MSXML.ServerXMLHTTP.5.0") 創(chuàng)建時(shí)對(duì)象所處的狀態(tài)
1 - 載入中,這個(gè)時(shí)候,已經(jīng)調(diào)用了 open 方法,但是還沒(méi)有使用 send 方法發(fā)送數(shù)據(jù)
2 - 已經(jīng)載入,已經(jīng)調(diào)用了 send 方法發(fā)送數(shù)據(jù),但是還沒(méi)有可用的響應(yīng)流
3 - 正在交互,正在接收數(shù)據(jù),這個(gè)時(shí)候可以使用 responseBody 和 responseText 屬性來(lái)獲取已經(jīng)得到的部分?jǐn)?shù)據(jù)了
4 - 完成請(qǐng)求,全部數(shù)據(jù)已經(jīng)接收完成
通常情況下,我們只需要判斷一下狀態(tài) 4 即可,這個(gè)時(shí)候數(shù)據(jù)已經(jīng)全部載入,使用 responseBody 或 responseText 屬性就能獲取需要的數(shù)據(jù)。
3. status HTTP 響應(yīng)狀態(tài)碼,正常情況應(yīng)該為 200,如果請(qǐng)求的資源不存在,就會(huì)返回 404,還有其他狀態(tài)碼如服務(wù)器錯(cuò)誤 500 等。
4. statusText HTTP 響應(yīng)狀態(tài)文本,用于描述響應(yīng)狀態(tài)碼所代表的意思,諸如 200 OK 中的 OK,404 Not Found 中的 Not Found
5. responseBody 響應(yīng)數(shù)據(jù)的字節(jié)數(shù)組,這在 VBScript 里是可以直接使用的,但是在 JScript 里就需要轉(zhuǎn)換過(guò)了。
6. responseText 以文本方式獲取響應(yīng)數(shù)據(jù)
7. responseXML 將響應(yīng)數(shù)據(jù)作為一個(gè) XMLDOM 對(duì)象來(lái)返回,這在請(qǐng)求的數(shù)據(jù)是一個(gè) XML 文檔時(shí)特別有用
8. responseStream 響應(yīng)流對(duì)象,這個(gè)屬性不常用
這里,我講的是在 ASP 環(huán)境中使用服務(wù)端 XMLHttpRequest,并以 JScript 做為演示代碼的語(yǔ)言,因此,你需要了解 ASP 以及 JScript。
服務(wù)端 XMLHTTP,通常會(huì)用在獲取遠(yuǎn)程主機(jī)的網(wǎng)頁(yè)或者其他內(nèi)容,新聞聚合系統(tǒng)一般就是使用服務(wù)端 XMLHTTP 對(duì)象來(lái)獲取要聚合的 Feed 的內(nèi)容,然后使用 XMLDOM 對(duì)象來(lái)分析 Feed 的內(nèi)容,取出新聞的標(biāo)題、作者、內(nèi)容等信息,再存在數(shù)據(jù)庫(kù)中,然后將若干個(gè)數(shù)據(jù)源的新聞一起顯示在一起。抓蝦就是這樣一個(gè)新聞聚合器,但是它不是用 ASP 寫的就是了 :)
在 ASP 中,我們可以用以下代碼來(lái)創(chuàng)建一個(gè) ServerXMLHTTP 對(duì)象,而這個(gè)對(duì)象,就是我們?cè)诜?wù)端進(jìn)行一切操作的基礎(chǔ)。
復(fù)制代碼 代碼如下:
var xmlhttp = new ActiveXObject("MSXML2.ServerXMLHTTP.5.0");
首先來(lái)了解一下 ServerXMLHTTP 對(duì)象有哪些比較有用的方法:
1. abort 這個(gè)方法用于取消 XMLHTTP 的請(qǐng)求。如果 XMLHTTP 對(duì)象以異步方式發(fā)送請(qǐng)求,如果到達(dá)一定的時(shí)間請(qǐng)求仍然沒(méi)有返回,就可以使用這個(gè)方法來(lái)取消請(qǐng)求。
2. getAllResponseHeaders 這個(gè)方法的返回值是一個(gè)字符串,相當(dāng)于 HTTP 請(qǐng)求的頭部去掉了請(qǐng)求方法、URI和協(xié)議版本信息。
3. getResponseHeader 這個(gè)方法用來(lái)獲取指定頭部信息,比較有用的就是可以用來(lái)獲取返回?cái)?shù)據(jù)的 Content-Type、Referer 等。
4. open 使用指定的請(qǐng)求方法、URI和同步方式以及認(rèn)證信息等初始化一個(gè)請(qǐng)求。
5. send 發(fā)送 HTTP 請(qǐng)求,等待接收響應(yīng)數(shù)據(jù),注意,如果是以同步方式發(fā)送請(qǐng)求,send方法調(diào)用后不會(huì)立即返回,而是等到請(qǐng)求完成后才會(huì)返回,而以異步方法請(qǐng)求時(shí),則會(huì)立即返回。另外,send方法帶有一個(gè)可選參數(shù)body,表示要發(fā)送的數(shù)據(jù),這在使用 POST 方法時(shí)比較有用。
6. setTimeout 設(shè)置 ServerXMLHTTP 對(duì)象的 4 個(gè)超時(shí)時(shí)間,分別是:域名解析、連接服務(wù)器、發(fā)送數(shù)據(jù)、接收響應(yīng)??梢酝ㄟ^(guò)設(shè)置相應(yīng)的超時(shí)時(shí)間來(lái)控制 ServerXMLHTTP 對(duì)象,以免 ServerXMLHTTP 不能及時(shí)返回而造成程序停止響應(yīng)。
7. setRequestHeader 設(shè)置請(qǐng)求的 Header,在客戶端 XMLHttpRequest中,通常用來(lái)設(shè)置請(qǐng)求的數(shù)據(jù)類型,或者標(biāo)識(shí)請(qǐng)求的方法等等,例如 jquery 會(huì)增加頭部標(biāo)識(shí) X-Request-With,表示請(qǐng)求是從 XMLHttpRequest 對(duì)象發(fā)出,以方便服務(wù)端做出相應(yīng)的動(dòng)作。
8. waitForResponse 在使用異步方式發(fā)送請(qǐng)求時(shí),可以用這個(gè)方法來(lái)控制請(qǐng)求的進(jìn)程。在服務(wù)端腳本中,不可以像客戶端那樣直接使用回調(diào)函數(shù)來(lái)控制異步請(qǐng)求,也沒(méi)有相應(yīng)的函數(shù)來(lái)使用程序休眠一定的時(shí)間,因此,為了等待請(qǐng)求返回,我們可以使用這個(gè)方法來(lái)等待一定時(shí)間。
另外,還有其他一些方法,如 getOption、setOption、setProxy 等,這些方法用得比較少,因此這里不再介紹,需要了解的朋友可以查閱 MSDN。
接下來(lái),再看看 ServerXMLHTTP 對(duì)象的屬性:
1. onreadystatechange XMLHTTP 對(duì)象狀態(tài)改變時(shí)的回調(diào)函數(shù),這個(gè)屬性為異步操作奠定了一個(gè)基礎(chǔ),可以讓程序在不用查詢 XMLHTTP 對(duì)象狀態(tài)的情況獲知 XMLHTTP 操作是否已經(jīng)完成。
2. readyState XMLHTTP 對(duì)象狀態(tài),有 5 個(gè)值,從 0 到 4,分別代表的意思是:
0 - 未初始化,剛使用 new ActiveXObject("MSXML.ServerXMLHTTP.5.0") 創(chuàng)建時(shí)對(duì)象所處的狀態(tài)
1 - 載入中,這個(gè)時(shí)候,已經(jīng)調(diào)用了 open 方法,但是還沒(méi)有使用 send 方法發(fā)送數(shù)據(jù)
2 - 已經(jīng)載入,已經(jīng)調(diào)用了 send 方法發(fā)送數(shù)據(jù),但是還沒(méi)有可用的響應(yīng)流
3 - 正在交互,正在接收數(shù)據(jù),這個(gè)時(shí)候可以使用 responseBody 和 responseText 屬性來(lái)獲取已經(jīng)得到的部分?jǐn)?shù)據(jù)了
4 - 完成請(qǐng)求,全部數(shù)據(jù)已經(jīng)接收完成
通常情況下,我們只需要判斷一下狀態(tài) 4 即可,這個(gè)時(shí)候數(shù)據(jù)已經(jīng)全部載入,使用 responseBody 或 responseText 屬性就能獲取需要的數(shù)據(jù)。
3. status HTTP 響應(yīng)狀態(tài)碼,正常情況應(yīng)該為 200,如果請(qǐng)求的資源不存在,就會(huì)返回 404,還有其他狀態(tài)碼如服務(wù)器錯(cuò)誤 500 等。
4. statusText HTTP 響應(yīng)狀態(tài)文本,用于描述響應(yīng)狀態(tài)碼所代表的意思,諸如 200 OK 中的 OK,404 Not Found 中的 Not Found
5. responseBody 響應(yīng)數(shù)據(jù)的字節(jié)數(shù)組,這在 VBScript 里是可以直接使用的,但是在 JScript 里就需要轉(zhuǎn)換過(guò)了。
6. responseText 以文本方式獲取響應(yīng)數(shù)據(jù)
7. responseXML 將響應(yīng)數(shù)據(jù)作為一個(gè) XMLDOM 對(duì)象來(lái)返回,這在請(qǐng)求的數(shù)據(jù)是一個(gè) XML 文檔時(shí)特別有用
8. responseStream 響應(yīng)流對(duì)象,這個(gè)屬性不常用
相關(guān)文章
用asp實(shí)現(xiàn)訪問(wèn)遠(yuǎn)程計(jì)算機(jī)上MDB access數(shù)據(jù)庫(kù)文件的方法
用asp實(shí)現(xiàn)訪問(wèn)遠(yuǎn)程計(jì)算機(jī)上MDB access數(shù)據(jù)庫(kù)文件的方法...2007-11-11
asp下實(shí)現(xiàn)字符串的補(bǔ)充fill()
在一個(gè)字符串前后補(bǔ)全另一字符串,在一個(gè)字符串前面補(bǔ)全另一字符串,在一個(gè)字符串后面補(bǔ)全另一字符串2008-02-02
ASP中實(shí)現(xiàn)執(zhí)行定時(shí)任務(wù)的方法
這篇文章主要介紹了ASP中實(shí)現(xiàn)執(zhí)行定時(shí)任務(wù)的方法,本文使用WSH (Windows Scripting Host) 的實(shí)現(xiàn)定時(shí)任務(wù),需要的朋友可以參考下2014-07-07
利用 cache 做對(duì)比靜態(tài)頁(yè)的網(wǎng)頁(yè)技術(shù)
利用 cache 做對(duì)比靜態(tài)頁(yè)的網(wǎng)頁(yè)技術(shù)...2007-10-10

