文檔: 使 Remote Scripting 在伺服器頁中有效
除了對客戶頁進行配置以便於調用遠程指令碼外,您還必須對自己的伺服器頁進行配置,以便於對它們進行接收。其做法包括下面這些步驟:
包含 remote scripting 伺服器庫,並對其進行初始化。
編寫客戶頁能調用的函數或者常式。
將自己的函數和常式顯露為方法。
預設的情況是,客戶指令碼所調用的某個 ASP 頁並不顯示在瀏覽器中──而是簡單地在伺服器上執行並將結果送到用戶端。因此,作為規則,您無需在 ASP 頁中包括進任何 HTML 文本,而只需指令碼。不過,還是有可能在某個 ASP 頁上調用包括 HTML 文本的方法並作正常顯示的,只要您初始化了 remote scripting 伺服器庫,並用下面描述的技巧顯露頁的方法。
包括並初始化 remote scripting 伺服器庫
建立伺服器端引用 Rs.asp 檔案的 INCLUDE 語句,如下例所示:
<!--#INCLUDE FILE="../_ScriptLibrary/RS.ASP"-->
確保為 Rs.asp 檔案指定正確路徑。INCLUDE 語句可以出現在使用者檔案的任何位置。
將一個調用插入到RSDispatch方法中,當您從客戶指令碼調用伺服器指令碼時,可用該方法找到正確過程。該調用可能看起來如下所示:
<% RSDispatch %>
RSDispatch 調用必須是運行在該頁上的第一個伺服器指令碼。按慣例,典型做法是將其放到檔案頭部。
在合適的初始化動作中,建立使用者將從客戶指令碼中作為方法調用的函數或者常式。您可以用任何指令碼語言書寫過程。過程可以接受任意數目的參數,但參數只可以為字串、數字、日期,或者其他單一資料型別──客戶不能將結構化資料(例如,對象或者數組)作為參數。
注意 當您將參數從客戶指令碼傳遞到伺服器指令碼時,它們即被轉換為字串。如果使用者期望自己的伺服器方法中有不同資料類型,可以在方法指令碼內部轉換之。
在伺服器指令碼中建立了過程後,您必須將它們作為方法顯露出來。為了達到該目的,您可以建立一個 javascript 公用描述對象,並列出使用者希望顯露的方法。
顯露方法
建立一個 public_description 對象,該對象為您的方法指定建構函式。下面的樣本命名建構函式為 MyServerMethods:
<SCRIPT LANGUAGE="javascript">
var public_description = new MyServerMethods();
建立您在 public_description 對象中指定的建構函式。在建構函式內部,指定使用者希望顯露的方法名,以及它們相應的函數或者常式名。使用者所使用的文法取決於使用者是在 javascript 中還是在 VBScript 中建立自己的方法。可使用下面的文法:
functionconstructor(){
this.methodName = functionName //對於 javascript 方法來說
// 對於用 VBScript 書寫的方法,使用下面的文法
this.methodName = Function('p1','p2','return functionName(p1,p2)')
}
注意 javascript 是大小寫敏感的,因此使用者必鬚根據約定正確大寫。
其中:
methodName 將被顯露的方法名。
functionName 伺服器頁中實現 methodName 的函數名。
p1, p2 傳遞給方法的參數列表──如果有參數的話。僅當該方法在 VBScript 中實現時,才能以這種方式顯式地聲明參數。參數名在建構函式內必須是一致的,但不需要和使用者在方法本身中所使用的參數名匹配。使用者不需要顯式地聲明傳遞給 javascript 中所實現方法的參數。
下面的樣本顯示了一個完整的 ASP 頁,該頁顯露兩個方法,square 和 add,這可以從客戶指令碼中調用。square 方法是在 javascript 中實現的,而 add 方法則是在 VBScript 中實現的。
<% 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)
' 資料類型發生轉換,因為它們作為字串進行傳遞
addNumbers = CInt(num1) + CInt(num2)
End Function
</SCRIPT>