1. 程式人生 > >XMLHTTPRequest的方法和屬性介紹

XMLHTTPRequest的方法和屬性介紹

使用XMLHTTPRequest物件的好處是可以在後臺下載網頁資料,不需要啟動瀏覽器程式,並且可以下載各種型別的網頁內容,例如XML文件、Javascript資料以及影象檔案等。
這裡先介紹一下XMLHTTPRequest物件的方法和屬性。

XMLHTTPRequest物件

XMLHTTPRequest物件提供客戶端和HTTP伺服器之間通訊的協議支援。

下面的Visual Basic例子建立一個XMLHTTP物件,並向伺服器請求一個XML文件。伺服器返回XML文件並在訊息框中顯示。

Dim HttpReq As New MSXML2.XMLHTTP30

HttpReq.open "GET", "http://localhost/books.xml", False

HttpReq.send

MsgBoxHttpReq.responseText

一個客戶機器可以使用XMLHTTP物件(MSXML2.XMLHTTP.3.0)傳送一個任意HTTP請求,接收響應並使用Microsoft XML Document Object Model(DOM)解析響應。

這個物件整合到Microsoft XML Core Services(MSXML)中,支援直接從MSXML DOM物件傳送請求主體,並直接在MSXML DOM物件中解析響應。

一般的使用順序是:呼叫Open方法,通過setRequestHeader方法設定自定義頭部資訊,接著呼叫send方法,然後檢查四個不同的響應屬性中的一個。

XMLHTTPRequest的方法

Open方法

初始化一個MSXML2.XMLHTTP的請求,並指定請求的方法、URL和身份驗證資訊。
語法:

oXMLHttpRequest.open(bstrMethod,bstrUrl,varAsync,bstrUser,bstrPassword)

引數:
bstrMethod

表示用來開啟連線的HTTP遞交方法,如GET,POST,PUT或者PROPFIND。對XMLHTTP來說,這個引數大小寫無關。
bstrUrl
表示請求的URL。可以是絕對URL,例如“http://Myserver/Mypath/Myfile.asp”,也可以是相對URL,例如“../Mypath/Myfile.asp”。
varAsync[optional]


一個Boolean值表示是否是非同步呼叫。預設是True,也就是說呼叫立刻返回。如果設定為True,需要在onreadystatechange屬性添加回調函式,這樣你可以知道什麼時候Send呼叫結束。
bstrUser[optional]
驗證的使用者名稱稱。如果這個引數是Null(”")或者省略,而網站需要使用者證明,將顯示一個登入視窗。
bstrPassword[optional]
驗證的使用者密碼。如果bstrUser是Null(”")或者省略,這個引數將被忽略。

下面的例子建立一個XMLHTTP物件,然後使用Open語句獲得本地IIS Web伺服器上的books.xml檔案的副本。後面的程式碼選擇元素並顯示在訊息視窗上。

Dim xmlHttp As New XMLHTTP30

Dim book AsIXMLDOMNode

xmlHttp.open "GET", "http://localhost/books.xml", False

xmlHttp.send

Set book =xmlHttp.responseXML.selectSingleNode("//book[@id='bk101']")

MsgBox book.xml

呼叫Open方法後,必須呼叫send方法傳送請求和資料給伺服器。

Send方法

傳送一個HTTP請求到伺服器並解釋一個響應。
語法:

oXMLHttpRequest.send(varBody)

引數:
varBody

表示和請求一起傳送的訊息主體。
示例:

Dim xmlhttp As New Msxml2.xmlhttp

xmlhttp.open "GET", "http://localhost/sample.xml", False

xmlhttp.send

MsgBoxxmlhttp.responseXML.xml

取決於Open方法中bAsync引數的值,這個Send方法可以說非同步或同步的。如果Open方法使用bAsync=False呼叫,這個呼叫直到整個響應被接收後或者超時後才返回。

Abort方法

取消當前的Http請求。
語法:

oXMLHttpRequest.abort

請求將會被返回為UNINITIALIZED狀態,下次呼叫時必須使用Open方法。

setRequestHeader方法

指定一個HTTP頭部資訊的名稱。
語法:

oXMLHttpRequest.setRequestHeader(bstrHeader,bstrValue)

引數:
bstrHeader 一個字串。需設定的頭部名稱;例如:“depth”。這個引數不能包括冒號,應該是HTTP頭部的實際字串。
bstrValue 一個字串。需設定的頭部值;例如:“infinity”。

如果這個名稱的另一個頭部已經存在,將把這個值新增到前一個頭部。

getResponseHeader方法

從返回資訊中獲取一個HTTP頭部的值
語法:

strValue =oXMLHttpRequest.getResponseHeader(bstrHeader)

引數:
bstrHeader
 一般包含區分大小寫的頭部名稱的字串
示例:

Dim xmlhttp As New Msxml2.XMLHTTP30

xmlhttp.open "GET", "http://localhost/sample.xml", False

xmlhttp.send

MsgBoxxmlhttp.getResponseHeader("Server")

這個方法的結果只有在send方法成功完成之後才有效。xmlhttp.getResponseHeader(”Content-Type”)返回字串”text/xml”,假設伺服器設定了”text/xml”為內容型別。你可以使用getAllResponseHeaders方法來查詢完整的頭部清單。

getAllResponseHeaders方法

獲取所有HTTP頭部的值,返回一個包含查詢頭部資訊的字串。
語法:

strValue =oXMLHttpRequest.getAllResponseHeaders

示例:

Dim xmlhttp As New MSXML2.XMLHTTP30

xmlhttp.open "GET", "http://localhost/sample.xml", False

xmlhttp.send

MsgBoxxmlhttp.getAllResponseHeaders()

這個例子返回所得到的由Web(HTTP)伺服器返回的頁面頭部資訊。例如,你的輸出應該包括下面型別的頭部資訊:

Server:Microsoft-IIS/5.1
X-Powered-By:ASP.NET
Date:Sat, 07 Jun 2003 23:23:06 GMT
Content-Type:text/xml
Accept-Ranges:bytes
Last Modified:Sat, 06 Jun 2003 17:19:04 GMT
ETag:”a0e2eeba4f2cc31:97f”
Content-Length:9

每個頭部名稱/值對通過換行符分開(VB中是vbCrLf)。
這個方法的結果只有在send方法成功完成後才有效。

XMLHTTPRequest物件的屬性

Status屬性

表示一個請求返回的HTTP狀態程式碼,只讀。
語法:

lValue =oXMLHttpRequest.status

示例:

Dim xmlServerHttp As New Msxml2.ServerXMLHTTP30

xmlServerHttp.open "GET", "http://localhost/books.xml", False

xmlServerHttp.send

MsgBoxxmlServerHttp.status

一個標準的HTTP狀態程式碼是一個長整型,這個值只有在send方法成功返回後才有效。返回狀態程式碼描述如下表:

值 描述
100 Continue
101 Switching protocols
200 OK
201 Created
202 Accepted
203 Non-Authoritative Information
204 No Content
205 Reset Content
206 Partial Content
300 Multiple Choices
301 Moved Permanently
302 Found
303 See Other
304 Not Modified
305 Use Proxy
307 Temporary Redirect
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Request Entity Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Requested Range Not Suitable
417 Expectation Failed
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported

statusText屬性

表示HTTP響應行狀態,只讀,這個值只有在send方法成功返回後才有效。
語法:

strValue =oXMLHttpRequest.statusText

示例:

Dim xmlhttp As New Msxml2.XMLHTTP30

xmlhttp.open "GET", "http://localhost/books.xml", False

xmlhttp.send

MsgBox xmlhttp.Status

responseBody屬性

只是表示返回的HTTP響應的幾種格式的其中一種。
語法:

strValue =oXMLHttpRequest.responseBody

示例:

Dim xmlhttp As New Msxml2.XMLHTTP50

xmlhttp.open "GET", "http://localhost/books.xml", False

xmlhttp.send

MsgBox xmlhttp.responseBody

這個屬性是Variant型別。只讀屬性。以一個無符號的位元組陣列表示響應的主體。它包含直接從伺服器收到的原始未解碼的位元組。因此,根據伺服器所傳送的資料,它可以是以下型別的二進位制編碼資料(UTF-8,UCS-2,UCS-4,Shift_JIS等等)。

responseStream屬性

只是表示返回的HTTP響應的幾種格式的其中一種。
語法:

strValue =oXMLHttpRequest.responseStream

這個屬性是Variant型別。只讀屬性。以IStream表示響應的主體。這個Stream包含直接從伺服器收到的原始未解碼的位元組。因此,根據伺服器所傳送的資料,它可以是以下型別的二進位制編碼資料(UTF-8,UCS-2,UCS-4,Shift_JIS等等)。

responseText屬性

以字串表示響應主體。
語法:

strValue =oXMLHttpRequest.responseText

示例:

Dim xmlhttp As New Msxml2.XMLHTTP30

xmlhttp.open "GET", "http://localhost/books.xml", False

xmlhttp.send

MsgBoxxmlhttp.responseText

這個屬性是Variant型別。只讀屬性。這個屬性只是表示返回的HTTP響應的幾種格式的其中一種。IXMLHTTP試圖將響應解碼為一個Unicode字串。它假設預設的編碼是UTF-8,但只要伺服器傳送合適的Unicode位元組順序標識,也可以解碼任何UCS-2(big or little endian)或UCS-4格式的編碼資料。它不解析responseXML屬性來支援XML編碼。

responseXML屬性

表示已經解析的響應主體。
語法:

Set objDispatch = oXMLHttpRequest.responseXML

示例:

Dim xmlhttp As New Msxml2.XMLHTTP30

xmlhttp.open "GET", "http://localhost/books.xml", False

xmlhttp.send

MsgBoxxmlhttp.responseXML.xml

只讀屬性。基於安全原因,解析驗證功能一般被關閉以防止Microsoft XML Core Services(MSXML)試圖下載文件型別定義(DTD)或XML-Data定義。如果響應主體不是有效的XML格式,這個屬性返回已解析的DOMDocument物件,這樣你可以訪問錯誤資訊。這個屬性不返回IXMLDOMParseError本身。
如果響應由ASP頁面產生而MIME型別沒有被正確地使用ASP的Response.Content方法設定為所支援的MIME型別,responseXML將為空。
MSXML 6.0所支援的MIME型別包括“text/xml”,“application/xml”或者任何以“+xml”結束的型別,例如“application/rss+xml”。
MSXML 6.0之前的版本支援的MIME型別包括“text/xml”和“application/xml”。

readyState屬性

表示請求的狀態。
語法:

lValue =oXMLHttpRequest.readyState

返回值Variant型別,只讀屬性。以I4(4個位元組的整型)表示請求的狀態。定義如下:

0 (UNINITIALIZED)“未初始化”
物件已經建立,但沒有初始化(沒有呼叫Open方法)。

1 (LOADING) “載入中”
物件已經建立,但send方法還沒有被呼叫。

2 (LOADED) “已經載入”
已經呼叫send方法,但未有狀態和頭部資訊。

3 (INTERACTIVE) “正在接收”
部分資料已經接收。這個時候呼叫responseBody和responseText屬性來獲取部分結果將返回錯誤,以為狀態和頭部資訊還未完全可用。

4 (COMPLETED) “完成”
所有資料接收完畢,可以通過responseBody和responseText屬性獲取全部資料。
注意:
從MSXML3.0開始,在資料載入開始但還沒有結束時讀取status屬性(例如,在LOADED或INTERACTIVE狀態)將返回下面的錯誤:“The data necessary to complete thisoperation is not yet available.”

onreadystatechange屬性

指定當readyState屬性變化時呼叫的事件處理過程。注意onreadystatechange用於指令碼環境中,不能在Visual Basic或C++中直接呼叫。