明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

XMLHTTP ActiveX對(duì)象的訪問(wèn)ASP區(qū)段變量的其他方法

[摘要]幾個(gè)月以前,一個(gè)同事到我這里來(lái),說(shuō)他有一個(gè)客戶端JavaScript的問(wèn)題。我不得不向他解釋說(shuō),活動(dòng)服務(wù)器頁(yè)面(ASP)的區(qū)段變量不能從客戶端訪問(wèn),除非它們通過(guò)cookie或者隱藏的輸入框被傳遞。但...
幾個(gè)月以前,一個(gè)同事到我這里來(lái),說(shuō)他有一個(gè)客戶端JavaScript的問(wèn)題。我不得不向他解釋說(shuō),活動(dòng)服務(wù)器頁(yè)面(ASP)的區(qū)段變量不能從客戶端訪問(wèn),除非它們通過(guò)cookie或者隱藏的輸入框被傳遞。但是我沒(méi)有停止繼續(xù)尋找從客戶端訪問(wèn)ASP區(qū)段變量更好方法的工作。  

最近在研究如何不需要上傳和下載頁(yè)面就能夠從服務(wù)器獲取信息時(shí),我讀到了關(guān)于XMLHTTP ActiveX對(duì)象的內(nèi)容。從本質(zhì)上講,這個(gè)對(duì)象為Internet Explorer和Web服務(wù)器通訊并接收回應(yīng)提供了一種方法。它是MSXML動(dòng)態(tài)加載庫(kù)的一部分,其當(dāng)前的版本是第4版,并能從微軟免費(fèi)下載。同樣值得重要的是,注意對(duì)于微軟Internet Explorer 5.x,MSXML缺省的版本還是第2版。

XMLHTTP基礎(chǔ)
你可以使用XMLHTTP對(duì)象在服務(wù)器上執(zhí)行一個(gè)ASP,等待服務(wù)器的回應(yīng),然后根據(jù)回應(yīng)來(lái)動(dòng)作。這意味著有了一個(gè)JavaScript函數(shù)和一個(gè)專用的動(dòng)態(tài)服務(wù)器頁(yè)面,就有可能解決從客戶端訪問(wèn)變量的問(wèn)題?蛻舳诵枰獏^(qū)段變量的值嗎?沒(méi)問(wèn)題!你要做的全部工作就是調(diào)用一個(gè)小小的函數(shù)。

實(shí)現(xiàn)XMLHTTP對(duì)象
只要開始試著實(shí)現(xiàn)以前沒(méi)有嘗試過(guò)的概念或特性,我通常會(huì)發(fā)現(xiàn)把問(wèn)題分解成邏輯件會(huì)更容易一些。在這種情況下,我從服務(wù)器端的和客戶端的開始。心里有這個(gè)概念,我命名為test.asp的服務(wù)器端活動(dòng)服務(wù)器頁(yè)面看起來(lái)就是這個(gè)樣的了:

<%@ Language=VBScript%>
<%
Response.Write
Session(Request.QueryString("variable"))
%>
這個(gè)服務(wù)器端代碼段的目的是返回任何和查詢字符串里同鍵相關(guān)聯(lián)的ASP區(qū)段變量的值。

由于請(qǐng)求是從客戶端發(fā)起的,而且有一個(gè)對(duì)象正在被使用,所以客戶端這一部分會(huì)更詳細(xì)。創(chuàng)建XMLHTTP對(duì)象、設(shè)置對(duì)象的屬性、調(diào)用對(duì)象的發(fā)送方法,以及根據(jù)對(duì)象返回的信息進(jìn)行動(dòng)作,這些都是有必要的。Listing A是執(zhí)行這些任務(wù)的JavaScript。
要進(jìn)一步檢查XMLHTTP的可能性,就有必要往回走一步,這是因?yàn)槔肬RL把查詢信息從客戶端送到服務(wù)器端是有局限性的。URL最大長(zhǎng)度限定為2,048字節(jié)。這2KB的最大長(zhǎng)度還包括了URL的非查詢字符串這部分。要更進(jìn)一步就要找到一種更好的方法,把信息從客戶端送到服務(wù)器端。

我只花了大約20分鐘就決定好了如何把信息從客戶端傳遞到服務(wù)器端。我決定使用HTTP。在你確定我腦子發(fā)懵但已經(jīng)回過(guò)神以前,讓我來(lái)解釋一下。我要在HTTP報(bào)頭里傳遞信息。通過(guò)包頭來(lái)傳遞信息就能夠避免使用URL傳遞信息所無(wú)法避免的2,048字節(jié)的限制。

心里有了這些,現(xiàn)在就需要修改通過(guò)URL傳遞信息的例子了。在客戶端不是要把參數(shù)添加到test.asp的URL里,而是XMLHTTP對(duì)象的setHeader方法會(huì)傳遞這個(gè)參數(shù)。進(jìn)行這樣的修改就產(chǎn)生了Listing B里的客戶端程序。

在服務(wù)器端,有必要從HTTP報(bào)頭里而不是請(qǐng)求對(duì)象的查詢字符串里取回區(qū)段變量名。其結(jié)果是:

<%@ Language=VBScript %>
    <%
     Response.Write Session(Request.ServerVariables("HTTP_test"))
    %>
更進(jìn)一步
我在這里所描述的對(duì)象叫做XMLHTTP。注意這個(gè)對(duì)象的頭3個(gè)字母是XML。你已經(jīng)見過(guò)了如何在客戶端和服務(wù)器端傳遞信息,但是XMLHTTP對(duì)象的初衷是允許信息作為XML在客戶端和服務(wù)器端傳遞信息。在以后的文章里,我會(huì)解釋如何使用XML的簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(SOAP)來(lái)交換更加復(fù)雜的信息。