簡介
許多ASP開發者都希望在自己的網站中能夠使用到微軟提供的支持XML
的新功能。其中,有些人發現可以使用XML來裝飾網站,但是,如果僅僅
是只使用XMLDOM的話,你就會失去其他一些更重要的東西。畢竟,XML是用來
作為一種網上數據表現和數據交換的形象出現的。盡管使用XML可以非常滿意
地描繪你的數據,但是開發者卻不得不使用CGI來進行浏覽器和服務器之間的
數據交換,除非你在浏覽器端和客戶端都使用XML文檔。
當然CGI從傳達信息的角度來說是能夠完全勝任的,但是如果要是和XML來
一起使用的話就讓XML失去了很多自己的用處。幸運的是,微軟提供了一種更加
有效的方法來傳輸XML,雖然該方法在很大程度上並不被人所重視。
在微軟提供的MSXML解釋器包中有一系列的對象,也許沒有人會重視其中的
XMLHTTPConnection對象。簡而言之,它允許你打開一個到服務器上的HTTP連接,
發送一些數據和取回一些數據。並且所有的這一切都是在很少的幾段腳本中就能夠實現。
使用XMLHTTP對象通常是進行XML數據交換,但其他格式的數據也是允許的。
在商業程序中的運用
這種交換類型的標准模式是客戶端發送一個XML格式的文本字符串到服務端,
然後服務端將這個字符串裝載入一個XMLDOM對象中並且解釋它,然後返回一段
HTML給客戶端,或則是另外一段XML代碼給客戶端讓客戶端的浏覽器自己解釋。
在這種方式下,對於信息的傳遞來說是非常有效的形式,尤其是當你使用
DHTML允許你根據返回信息動態顯示時。
舉例如下(只能夠運行在客戶端和服務端都安裝有IE5的情況下)
<%
if (Request.ServerVariables("REQUEST_METHOD") == "POST" )
{
var req= Server.CreateObject("Microsoft.XMLDOM");
req.async=false;
req.load(Request);
if (req.documentElement.nodeName=="timesheet")
{
//對數據隨便進行一些處理。。。
.....
Response.write("<h1>Timesheet Updated!</h1><b>"+req.documentElement.text+"</b>");
}
}
else
{ %>
<div id="divDisplay">The response will be put in here</div>
<input type="button" onclick="sendData();" value="Send it!">
<script>
function sendData(){
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.Open("POST", "http://www.yoursite.com/thispage.asp", false);
xmlhttp.Send("<timesheet>An impossibly useless timesheet fragment</timesheet>");
divDisplay.innerHTML=xmlhttp.responseText;
}
</script>
<% } %>
在上面的代碼中,其中客戶端的腳本將建立一個適當的COM對象,打開一個在網站
www.yoursite.com的連接(使用了HTTP的POST方法,同步方式),使用Send方法發送
一個XML片段,然後根據服務器上的響應填充divDisplay區域(這裡使用了DHTML)。
具體的執行過程是,在服務器上,Request對象被轉載入一個XML文檔然後被解釋器解釋。
服務器響應XMLHTTP連接的方式和響應其他任何方式的HTTP連接是一樣的,也是使用了
Response對象。注意的是XMLHTTP本身並不檢查request或則response的有效性,也就是說
Request或則Response中的數據可是並不需要一定是XML文檔。
“聰明,”你也許會說。“但是為什麼我們不使用CGI來代替它呢?”呵呵,我們要注意
這樣一件事,就是如果使用這種方式進行客戶端--服務端的交互時整個頁面並沒有被刷新。
我們都知道,如果要是通過CGI來做任何事情都必將導致浏覽器接收一個完整的新頁面,而
這尤其影響