1、XMLHTTP對象的Send方法 用Open方法對Request對象進行初始化後,調用Send方法發送XML數據: poster.send XML-data Send方法的參數類型是Variant,可以是字符串、DOM樹或任意數據流。發送數據的方式分為同步和異步兩種。在異步方式下,數據包一旦發送完畢,就結束Send進程,客戶機執行其他的操作;而在同步方式下,客戶機要等到服務器返回確認消息後才結束Send進程。 XMLHTTP對象中的readyState屬性能夠反映出服務器在處理請求時的進展狀況。客戶機的程序可以根據這個狀態信息設置相應的事件處理方法。屬性值及其含義如下表所示: 值 說明 0 Response對象已經創建,但XML文檔上載過程尚未結束 1 XML文檔已經裝載完畢 2 XML文檔已經裝載完畢,正在處理中 3 部分XML文檔已經解析 4 文檔已經解析完畢,客戶端可以接受返回消息
2、 服務器端的數據處理 服務器在接收到客戶機發送過來的數據包後,會馬上處理數據,並做出相應的響應。服務器先創建一個XMLDOM對象,然後將Request對象中的數據載入,並通過XMLDOM對象開始訪問XML數據。 在獲得XML數據的訪問入口後,首先做的事情是對XML文檔進行驗證(這部分的具體過程我們將在後面介紹XML Schema的時候一並說明)。一旦通過驗證,就可以利用DOM接口對XML數據進行分析處理(例如:將提取的信息用來更新數據庫中的記錄)。 一個簡單的ASP腳本如下: <% Set docReceived = CreateObject(“Microsoft.XMLDOM”) docReceived.async = False docReceived.load Request Set rootNode = docReceived.documentElement Set nodeCustomer = docReceived.selectSingleNode(“//customer”) customerID = nodeCustomer.firstChild.nodeValue …… %>
3、服務器端的響應消息 服務器在處理完XML數據之後,構造響應消息,並返回給客戶機。消息的形式可以是純文本、HTML頁面、XML文檔或者是嵌有XML數據島的HTML頁面。 首先來看一個Html頁面的例子,這個消息頁面中包含了客戶訂購的信息: <H3>Confirmation of order</H3> <% For Each node In listOrderitem title = node.getAttribute(“title”) Set quantityNode = node.selectSingleNode(“quantity”) Quantity = quantityNode.firstChild.nodeValue %> <P> <%=title%>, <%=quantity%> </P> <% Next %> 服務器采用XML文檔作為返回消息的優點是:客戶機可以利用智能程序對結構化的消息進行分析,能夠更准確地理解服務器所要表達的信息。 例如: <% Set docResponse = CreateObject(“Microsoft.XMLDOM”) docResponse.async = False docResponse.load “MyFixedResponse.xml” Response.ContentType =“text/xml” Response.save docResponse %> 在使用XML文檔時,必須在填寫Response內容之前將ContentType屬性值指明為“text/xml”,表示響應消息的格式為XML。save方法的用途是將XML文檔內容填充到Response對象中。 除了可以裝載已存在的XML文檔,還可以實時構造XML數據作為響應內容: <% Response.ContentType=“text/XML” %> <confirmation> <errorcode>0</errorcode> <shipped> <% For Each node In listOrderitem title = node.getAttribute(“title”) Set quantityNode = node.selectSingleNode(“quantity”) Quantity = quantityNode.firstChild.nodeValue %> <item title=“<%=title%>” quantity=“<%=quantity%>” /> <% Next %> </shipped> </confirmation>
4、客戶機處理響應信息 客戶機接收到返回消息後,進行簡單的處理,基本上就完成了C/S之間的一個交互周期。客戶機接收響應是通過XMLHTTP對象的屬性實現的: ● responseTxt:將返回消息作為文本字符串; ● responseXML:將返回消息視為XML文檔,在服務器響應消息中含有XML數據時使用; ● responseStream:將返回消息視為Stream對象。 HTML頁面的返回消息一般是被作為文本字符串進行處理。下面的這個例子是一個完整的交互過程,客戶機腳本的代碼如下: <DIV ID=“displayArea”> </DIV> <SCRIPT LANGUAGE=“VBScript”> Sub Submit_OnClick() ’創建XMLDOM Set docSubmit = CreateObject(“Microsoft.XMLDOM”) ……’如前所述構造數據包 ’向服務器發送數據包 Set poster = CreateObject(“Microsoft.XMLHTTP”) poster.open “POST”, “CustomerOrder.ASP”, False poster.send docSubmit ’接收Resoponse消息 displayArea.innerHTML = poster.responseText End Sub Submit_OnClick方法首先創建XMLDOM對象用來裝載XML數據,然後創建XMLHTTP對象以同步方式將數據包發送給服務器。在服務器處理完畢之後返回一個Html頁面作為響應消息。XMLHTTP對象按照文本字符串方式接收消息,並把它與DIV元素綁定起來,在浏覽器中顯示最終結果。 響應XML數據的基本過程與上面的這個例子是一樣的,只是在接收時,使用responseXML屬性,然後利用DOM技術對XML消息做進一步的處理。這樣,一個完整的C/S交互過程就全部結束了。