- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) > ASP >
- 服務(wù)器XMLHTTP(Server XMLHTTP in ASP)基礎知識
相對于 Ajax,服務(wù)端 XMLHTTP 就是在服務(wù)端使用 XMLHttpRequest 對象了。雖然說(shuō),在服務(wù)端使用異步請求是比較不方便的,但是做為可以服務(wù)端發(fā)送 HTTP 請求的組件,學(xué)習一下也是沒(méi)有壞處的。
這里,我講的是在 ASP 環(huán)境中使用服務(wù)端 XMLHttpRequest,并以 JScript 做為演示代碼的語(yǔ)言,因此,你需要了解 ASP 以及 JScript。
服務(wù)端 XMLHTTP,通常會(huì )用在獲取遠程主機的網(wǎng)頁(yè)或者其他內容,新聞聚合系統一般就是使用服務(wù)端 XMLHTTP 對象來(lái)獲取要聚合的 Feed 的內容,然后使用 XMLDOM 對象來(lái)分析 Feed 的內容,取出新聞的標題、作者、內容等信息,再存在數據庫中,然后將若干個(gè)數據源的新聞一起顯示在一起。抓蝦就是這樣一個(gè)新聞聚合器,但是它不是用 ASP 寫(xiě)的就是了 :)
在 ASP 中,我們可以用以下代碼來(lái)創(chuàng )建一個(gè) ServerXMLHTTP 對象,而這個(gè)對象,就是我們在服務(wù)端進(jìn)行一切操作的基礎。
代碼如下:
var xmlhttp = new ActiveXObject("MSXML2.ServerXMLHTTP.5.0");
首先來(lái)了解一下 ServerXMLHTTP 對象有哪些比較有用的方法:
1. abort 這個(gè)方法用于取消 XMLHTTP 的請求。如果 XMLHTTP 對象以異步方式發(fā)送請求,如果到達一定的時(shí)間請求仍然沒(méi)有返回,就可以使用這個(gè)方法來(lái)取消請求。
2. getAllResponseHeaders 這個(gè)方法的返回值是一個(gè)字符串,相當于 HTTP 請求的頭部去掉了請求方法、URI和協(xié)議版本信息。
3. getResponseHeader 這個(gè)方法用來(lái)獲取指定頭部信息,比較有用的就是可以用來(lái)獲取返回數據的 Content-Type、Referer 等。
4. open 使用指定的請求方法、URI和同步方式以及認證信息等初始化一個(gè)請求。
5. send 發(fā)送 HTTP 請求,等待接收響應數據,注意,如果是以同步方式發(fā)送請求,send方法調用后不會(huì )立即返回,而是等到請求完成后才會(huì )返回,而以異步方法請求時(shí),則會(huì )立即返回。另外,send方法帶有一個(gè)可選參數body,表示要發(fā)送的數據,這在使用 POST 方法時(shí)比較有用。
6. setTimeout 設置 ServerXMLHTTP 對象的 4 個(gè)超時(shí)時(shí)間,分別是:域名解析、連接服務(wù)器、發(fā)送數據、接收響應??梢酝ㄟ^(guò)設置相應的超時(shí)時(shí)間來(lái)控制 ServerXMLHTTP 對象,以免 ServerXMLHTTP 不能及時(shí)返回而造成程序停止響應。
7. setRequestHeader 設置請求的 Header,在客戶(hù)端 XMLHttpRequest中,通常用來(lái)設置請求的數據類(lèi)型,或者標識請求的方法等等,例如 jquery 會(huì )增加頭部標識 X-Request-With,表示請求是從 XMLHttpRequest 對象發(fā)出,以方便服務(wù)端做出相應的動(dòng)作。
8. waitForResponse 在使用異步方式發(fā)送請求時(shí),可以用這個(gè)方法來(lái)控制請求的進(jìn)程。在服務(wù)端腳本中,不可以像客戶(hù)端那樣直接使用回調函數來(lái)控制異步請求,也沒(méi)有相應的函數來(lái)使用程序休眠一定的時(shí)間,因此,為了等待請求返回,我們可以使用這個(gè)方法來(lái)等待一定時(shí)間。
另外,還有其他一些方法,如 getOption、setOption、setProxy 等,這些方法用得比較少,因此這里不再介紹,需要了解的朋友可以查閱 MSDN。
接下來(lái),再看看 ServerXMLHTTP 對象的屬性:
1. onreadystatechange XMLHTTP 對象狀態(tài)改變時(shí)的回調函數,這個(gè)屬性為異步操作奠定了一個(gè)基礎,可以讓程序在不用查詢(xún) XMLHTTP 對象狀態(tài)的情況獲知 XMLHTTP 操作是否已經(jīng)完成。
2. readyState XMLHTTP 對象狀態(tài),有 5 個(gè)值,從 0 到 4,分別代表的意思是:
0 - 未初始化,剛使用 new ActiveXObject("MSXML.ServerXMLHTTP.5.0") 創(chuàng )建時(shí)對象所處的狀態(tài)
1 - 載入中,這個(gè)時(shí)候,已經(jīng)調用了 open 方法,但是還沒(méi)有使用 send 方法發(fā)送數據
2 - 已經(jīng)載入,已經(jīng)調用了 send 方法發(fā)送數據,但是還沒(méi)有可用的響應流
3 - 正在交互,正在接收數據,這個(gè)時(shí)候可以使用 responseBody 和 responseText 屬性來(lái)獲取已經(jīng)得到的部分數據了
4 - 完成請求,全部數據已經(jīng)接收完成
通常情況下,我們只需要判斷一下?tīng)顟B(tài) 4 即可,這個(gè)時(shí)候數據已經(jīng)全部載入,使用 responseBody 或 responseText 屬性就能獲取需要的數據。
3. status HTTP 響應狀態(tài)碼,正常情況應該為 200,如果請求的資源不存在,就會(huì )返回 404,還有其他狀態(tài)碼如服務(wù)器錯誤 500 等。
4. statusText HTTP 響應狀態(tài)文本,用于描述響應狀態(tài)碼所代表的意思,諸如 200 OK 中的 OK,404 Not Found 中的 Not Found
5. responseBody 響應數據的字節數組,這在 VBScript 里是可以直接使用的,但是在 JScript 里就需要轉換過(guò)了。
6. responseText 以文本方式獲取響應數據
7. responseXML 將響應數據作為一個(gè) XMLDOM 對象來(lái)返回,這在請求的數據是一個(gè) XML 文檔時(shí)特別有用
8. responseStream 響應流對象,這個(gè)屬性不常用
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站