文檔: 使 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>