GB | BIG5
|
| 首頁 > 編程技術 > XML/WML > 正文 |
 |
| XML技術系列講座(9)客戶機與服務器的數據交互(上) |
| 本文出自:http://www.computerworld.com.cn 作者: 北京郵電大學 張劍 (2002-02-11 06:15:00) |
|
我們在前面文章中討論客戶機與服務器的數據交互時,數據流的方向總是從服務器到客戶機,很少涉及到客戶機向服務器發送請求並處理返回信息的問題。實際上,在電子商務中,客戶機向服務器發送數據也是一個重要的環節,如用戶填寫的貨物訂單等。 |
|
在傳統的實現方案中,用戶端只要在訂單中做出微小的變動,就要向服務器發送消息,要求更新數據。這樣就增加了服務器和網絡的負載,降低了工作效率。更有效的工作方式是在客戶機端對變更的信息進行緩存,然分批定量地發送給服務器,這樣一些不確定的修改信息都首先存儲在客戶機,只有那些確定的需要更新的數據才會發送出去,從而避免了網絡和服務器做許多無謂的操作。 |
|
使用XML進行C/S間的通信是一種高效的工作方式。首先在客戶機對XML數據打包,然以XML數據包為單元發送給服務器,服務器在處理完數據之返回消息,客戶機接收到消息執行其他操作,從而結束一次通信周期。 |
|
● 客戶機構造一個XMLDOM對象,作為發送XML數據的載體; |
|
● 客戶機創建一個XMLHTTP對象,該對象包括多種方法和屬性,可以發送XML數據到服務器上的應用程序(如ASP頁面),同時準備接收響應信息; |
|
● 客戶機將XML數據包轉載到XMLHTTP對象上並發送給ASP頁面; |
|
● 服務器執行ASP,並創建一個服務器端XMLDOM對象來接收XML數據; |
|
● ASP把數據包裝載到服務器端的XMLDOM對象上; |
|
● ASP對XML數據進行必要的處理,並返回確認消息; |
|
客戶機的首要任務是構造XML數據包。XMLDOM作為數據包的載體其數據來源可以是任何XML文檔或是XML文檔的片段(如XML數據島),甚至可以是使用loadXML方法接收用戶輸入信息動態生成的XML文檔。 |
|
Set docSubmit = CreateObject(“Microsoft.XMLDOM”) |
|
如果用戶輸入“5”作為用戶ID,那上面程序的運行結果如下所示: |
|
接下來,將XML數據添加到DOM樹的<customer>元素之。 |
|
<orderitem title=“Sushi, Anyone?” isbn=“72-80081-025”> |
|
Set docOrder = dsoOrder.XMLDocument |
|
Set nodeOrder = docOrder.selectSingleNode(“//order”) |
|
<order>元素是dsoOrder數據島中的一部分,要把它添加到其他的DOM樹中(比如前面的XML數據包),必須把<order>元素及其所有的繼節點進行備份,這是因為appendChild方法在把操作對象添加到其他DOM樹中,就從當前的DOM樹中刪除該對象!所以必須先調用cloneNode方法: |
|
Set nodeOrderToSend = nodeOrder.cloneNode(True) |
|
docSubmit.documentElement.appendChild nodeOrderToSend |
|
<orderitem title=“Sushi, Anyone?” isbn=“72-80081-025”> |
|
數據包構造完畢之,就可以利用HTTP Request對象把數據包發送給服務器。MSXML中提供了Microsoft.XMLHTTP對象,能夠完成從數據包到Request對象的轉換以及發送任務。 |
|
Set poster = CreateObject(“Microsoft.XMLHTTP”) |
|
對象創建調用Open方法對Request對象進行初始化,語法格式為: |
|
poster.open http-method, url, async, userID, password |
|
Open方法中包含了5個參數,前三個是必要的,兩個是可選的(在服務器需要進行身份驗証時提供)。參數的含義如下表所示: |
|
參數 |
說明 |
|
http-method |
HTTP的通信方式,比如GET或是 POST |
|
url |
接收XML數據的服務器的URL地址。通常在URL中要指明 ASP或CGI程序 |
|
async |
一個布爾標識,說明請求是否為異步的。如果是異步通信方式,客戶機就不等待服務器的響應;如果是同步方式,客戶機就要等到服務器返回消息才去執行其他操作 |
|
userID |
用戶ID,用服務器身份驗証 |
|
password |
用戶密碼,用服務器身份驗証 |
|
|
在下面這個例子中,客戶機就是使用異步方式向“CustomerOrder.asp”頁面發送了一個POST請求: |
|
 |
★ 樊強制作 歡迎分享 ★ |
|