文檔: 使 Remote Scripting 在服務(wù)器頁(yè)中有效
除了對(duì)客戶頁(yè)進(jìn)行配置以便于調(diào)用遠(yuǎn)程腳本外,您還必須對(duì)自己的服務(wù)器頁(yè)進(jìn)行配置,以便于對(duì)它們進(jìn)行接收。其做法包括下面這些步驟:
包含 remote scripting 服務(wù)器庫(kù),并對(duì)其進(jìn)行初始化。
編寫客戶頁(yè)能調(diào)用的函數(shù)或者例程。
將自己的函數(shù)和例程顯露為方法。 缺省的情況是,客戶腳本所調(diào)用的某個(gè) ASP 頁(yè)并不顯示在瀏覽器中──而是簡(jiǎn)單地在服務(wù)器上執(zhí)行并將結(jié)果送到客戶端。因此,作為規(guī)則,您無(wú)需在 ASP 頁(yè)中包括進(jìn)任何 HTML 文本,而只需腳本。不過(guò),還是有可能在某個(gè) ASP 頁(yè)上調(diào)用包括 HTML 文本的方法并作正常顯示的,只要您初始化了 remote scripting 服務(wù)器庫(kù),并用下面描述的技巧顯露頁(yè)的方法。
包括并初始化 remote scripting 服務(wù)器庫(kù)
創(chuàng)建服務(wù)器端引用 Rs.asp 文件的 INCLUDE 語(yǔ)句,如下例所示: <!--#INCLUDE FILE="../_ScriptLibrary/RS.ASP"-->
確保為 Rs.asp 文件指定正確路徑。INCLUDE 語(yǔ)句可以出現(xiàn)在用戶文件的任何位置。
將一個(gè)調(diào)用插入到RSDispatch方法中,當(dāng)您從客戶腳本調(diào)用服務(wù)器腳本時(shí),可用該方法找到正確過(guò)程。該調(diào)用可能看起來(lái)如下所示: <% RSDispatch %>
RSDispatch 調(diào)用必須是運(yùn)行在該頁(yè)上的第一個(gè)服務(wù)器腳本。按慣例,典型做法是將其放到文件頭部。
在合適的初始化動(dòng)作中,創(chuàng)建用戶將從客戶腳本中作為方法調(diào)用的函數(shù)或者例程。您可以用任何腳本語(yǔ)言書寫過(guò)程。過(guò)程可以接受任意數(shù)目的參數(shù),但參數(shù)只可以為字符串、數(shù)字、日期,或者其他簡(jiǎn)單數(shù)據(jù)類型──客戶不能將結(jié)構(gòu)化數(shù)據(jù)(例如,對(duì)象或者數(shù)組)作為參數(shù)。
注意 當(dāng)您將參數(shù)從客戶腳本傳遞到服務(wù)器腳本時(shí),它們即被轉(zhuǎn)換為字符串。如果用戶期望自己的服務(wù)器方法中有不同數(shù)據(jù)類型,可以在方法腳本內(nèi)部轉(zhuǎn)換之。
在服務(wù)器腳本中創(chuàng)建了過(guò)程后,您必須將它們作為方法顯露出來(lái)。為了達(dá)到該目的,您可以創(chuàng)建一個(gè) javascript 公共描述對(duì)象,并列出用戶希望顯露的方法。
顯露方法
創(chuàng)建一個(gè) public_description 對(duì)象,該對(duì)象為您的方法指定構(gòu)造函數(shù)。下面的示例命名構(gòu)造函數(shù)為 MyServerMethods: <SCRIPT LANGUAGE="javascript"> var public_description = new MyServerMethods();
創(chuàng)建您在 public_description 對(duì)象中指定的構(gòu)造函數(shù)。在構(gòu)造函數(shù)內(nèi)部,指定用戶希望顯露的方法名,以及它們相應(yīng)的函數(shù)或者例程名。用戶所使用的語(yǔ)法取決于用戶是在 javascript 中還是在 VBScript 中創(chuàng)建自己的方法??墒褂孟旅娴恼Z(yǔ)法: functionconstructor(){ this.methodName = functionName //對(duì)于 javascript 方法來(lái)說(shuō) // 對(duì)于用 VBScript 書寫的方法,使用下面的語(yǔ)法 this.methodName = Function('p1','p2','return functionName(p1,p2)') }
注意 javascript 是大小寫敏感的,因此用戶必須根據(jù)約定正確大寫。
其中:
methodName 將被顯露的方法名。
functionName 服務(wù)器頁(yè)中實(shí)現(xiàn) methodName 的函數(shù)名。
p1, p2 傳遞給方法的參數(shù)列表──如果有參數(shù)的話。僅當(dāng)該方法在 VBScript 中實(shí)現(xiàn)時(shí),才能以這種方式顯式地聲明參數(shù)。參數(shù)名在構(gòu)造函數(shù)內(nèi)必須是一致的,但不需要和用戶在方法本身中所使用的參數(shù)名匹配。用戶不需要顯式地聲明傳遞給 javascript 中所實(shí)現(xiàn)方法的參數(shù)。 下面的示例顯示了一個(gè)完整的 ASP 頁(yè),該頁(yè)顯露兩個(gè)方法,square 和 add,這可以從客戶腳本中調(diào)用。square 方法是在 javascript 中實(shí)現(xiàn)的,而 add 方法則是在 VBScript 中實(shí)現(xiàn)的。
<% RSDispatch %> <!--#INCLUDE FILE="../_ScriptLibrary/RS.ASP"-->
<SCRIPT RUNAT=SERVER LANGUAGE="javascript"> var public_description = new MyServerMethods(); function MyServerMethods() { this.square = squareNumber; this.add = Function( 'n1','n2','return addNumbers(n1,n2)' ); }
function squareNumber(numberToSquare){ return numberToSquare * numberToSquare; } </SCRIPT>
<SCRIPT RUNAT=SERVER LANGUAGE="VBScript"> Function addNumbers(num1, num2) ' 數(shù)據(jù)類型發(fā)生轉(zhuǎn)換,因?yàn)樗鼈冏鳛樽址M(jìn)行傳遞 addNumbers = CInt(num1) + CInt(num2) End Function </SCRIPT>
|