1、C/S的通信模式 我們在前面文章中討論客戶機與服務器的數據交互時,數據流的方向總是從服務器到客戶機,很少涉及到客戶機向服務器發送請求並處理返回信息的問題。實際上,在電子商務中,客戶機向服務器發送數據也是一個重要的環節,如用戶填寫的貨物訂單等。 在傳統的實現方案中,用戶端只要在訂單中做出微小的變動,就要向服務器發送消息,要求更新數據。這樣就增加了服務器和網絡的負載,降低了工作效率。更有效的工作方式是在客戶機端對變更的信息進行緩存,然後分批定量地發送給服務器,這樣一些不確定的修改信息都首先存儲在客戶機,只有那些確定的需要更新的數據才會發送出去,從而避免了網絡和服務器做許多無謂的操作。
2、基於XML的C/S 使用XML進行C/S間的通信是一種高效的工作方式。首先在客戶機對XML數據打包,然後以XML數據包為單元發送給服務器,服務器在處理完數據之後返回消息,客戶機接收到消息後執行其他操作,從而結束一次通信周期。 具體實現步驟如下: ● 客戶機構造一個XMLDOM對象,作為發送XML數據的載體; ● 客戶機創建一個XMLHTTP對象,該對象包括多種方法和屬性,可以發送XML數據到服務器上的應用程序(如ASP頁面),同時准備接收響應信息; ● 客戶機將XML數據包轉載到XMLHTTP對象上並發送給ASP頁面; ● 服務器執行ASP,並創建一個服務器端XMLDOM對象來接收XML數據; ● ASP把數據包裝載到服務器端的XMLDOM對象上; ● ASP對XML數據進行必要的處理,並返回確認消息; ● 客戶機接收響應消息,執行下一步操作。
3、向服務器發送數據 客戶機的首要任務是構造XML數據包。XMLDOM作為數據包的載體其數據來源可以是任何XML文檔或是XML文檔的片段(如XML數據島),甚至可以是使用loadXML方法接收用戶輸入信息後動態生成的XML文檔。 下面是動態生成的一個XML文檔: Set docSubmit = CreateObject(“Microsoft.XMLDOM”) docSubmit.async = False docSubmit.loadXML “<?xml version=‘1.0’?>”& “<customerorder>” & “<customer>”& txtCustomerID.Value & “</customer>”& “</customerorder>” 如果用戶輸入“5”作為用戶ID,那麼上面程序的運行結果如下所示: <?xml version=‘1.0’?> <customerorder> <customer>5</customer> </customerorder> 接下來,將XML數據添加到DOM樹的<customer>元素之後。 比如有如下的一個XML數據島: <xml id=“dsoOrder”> <?xml version=“1.0”?> <order> <orderitem title=“Sushi, Anyone?” isbn=“72-80081-025”> <price>14.99</price> <quantity>2</quantity> </orderitem> </order> </xml> 利用前面介紹的DOM技術訪問<order>元素: 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 經過以上操作,最後形成的數據包為: <?XML version=“1.0”?> <customerorder> <customer>5</customer> <order> <orderitem title=“Sushi, Anyone?” isbn=“72-80081-025”> <price>14.99</price> <quantity>2</quantity> </orderitem> </order> </customerorder>
4、XMLHTTP對象的Open方法 數據包構造完畢之後,就可以利用HTTP Request對象把數據包發送給服務器。MSXML中提供了Microsoft.XMLHTTP對象,能夠完成從數據包到Request對象的轉換以及發送任務。 創建XMLHTTP對象的語句如下: 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請求: poster.open "POST", "CustomerOrder.ASP", Falsetable>