文檔: 調用 Remote Scripting 方法異步
Remote scripting 向您提供了異步調用服務器方法的選擇 ──當執行服務器方法時,用戶的客戶腳本繼續運行。異步調用 remote scripting 方法使得您可以避免應用程序用戶接口速度的減慢,因為您可以在執行服務器腳本的同時繼續工作。
注意 如果您的應用程序需要,那麼也可以同步調用服務器方法。有關詳細信息,請參閱同步調用 Remote Scripting 方法。
異步調用某個 remote script 類似於同步調用。不過,當產生調用時,您要指定多至三個附加參數:
當服務器方法完成處理時,在用戶的客戶腳本中有一個被調用的 JavaScript callback function 。例如,如果用戶的 remote scripting 方法執行一次數據庫檢查,那麼回調函數可能得到遠程調用返回的檢查值,並在頁面上的某個控件中顯示之。
一個可選的 Javascript 錯誤回調函數──如果異步調用時遇到錯誤將調用之。
一個可選的上下文參數。這是用戶傳遞給方法並在以後傳回用戶的數據。它典型地用於幫助您決定在自己的回調函數中正調用什麼方法,例如,如果您正在將所有遠程腳本調用回傳給某個回調函數。
類似於同步調用,異步調用將創建一個調用對象,該對象支持包含被調用過程的返回值和狀態信息的屬性。例如,某個 remote scripting 方法的返回值可在調用對象的 return_value 屬性中獲得。在異步調用時,調用對象 status 屬性向用戶提供關於調用狀態的信息。
當您產生異步調用時,調用對象作為一個參數傳遞到回調函數中。這樣您就可以在調用腳本中對其進行測試(例如,決定呼叫的狀態),或者在回調函數中測試(例如,獲得方法的返回值)。
如果您已經創建了對某個服務器頁的對象引用,那麼您就可以用標准的 object.method 語法來調用方法。有關創建對象引用的詳細信息,請參閱作為對象引用 ASP 頁。
如何異步調用服務器方法
如果用戶已經創建了對服務器頁的對象引用,那麼可以用下面的語法。由於您必須傳遞回調函數的函數指針,因此對於異步方法調用來說,您必須用 JavaScript。
callObject = ASPObject. methodName(p1, p2[,...],
callbackFunction, errorCallbackFunction, context)
- 或者 -
如果您尚未創建對象引用,那麼可以調用 RSExecute 函數,所用語法如下:
callobject = RSExecute(url, methodName, p1, p2[,...],
callbackFunction, errorCallbackFunction, context)
其中:
ASPObject 您先前用 RSGetASPObject 方法創建的對象引用。有關詳細信息,請參閱作為對象引用 ASP 頁。
callObject 在完成 remote scripting 調用時將被實例化的調用對象名。您無需創建在調用 remote script 之前創建該對象;RSExecute 方法為您創建該對象。
url 包含您想要執行的遠程腳本的 ASP 頁的 URL。服務器頁必須已被配置為使得服務器頁中的 Remote Scripting 有效中所描述的那樣。服務器頁必須在用戶從中請求當前客戶頁的服務器上。
methodName 您想要執行的服務器頁上的方法名。
p1, p2, ... methodName 中方法所需要的任何參數。參數是通過值進行傳遞的。您可以傳遞簡單的數據類型,比如數值或者文本值,但不能傳遞數組或者對象。
注意 當把參數從客戶傳遞給服務器時,它們被轉換為字符串。要確保在使用這些參數值時,您的服務器方法將它們轉換為合適的數據類型。有關詳細信息,請參閱使得服務器頁中的 Remote Scripting 有效。
callbackFunction 您的客戶腳本中 JavaScript 函數的函數指針,當完成對 remote scripting 方法的調用時將調用該函數。由於用戶正在傳遞的是一個指針,因此不要在引號中包括其名字。在 RSExecute 調用中包括回調函數名意味著您想要異步執行 remote scripting 方法。
errorCallbackFunction 用戶的客戶腳本中某個可選 JavaScript 函數的函數指針,如果 remote scripting 方法遇到一個錯誤,將調用該函數。由於您所傳遞的是一個指針,因此不要在引號中包括其名。關於 remote scripting 中錯誤的詳細信息,請參閱檢查錯誤。
context 您傳遞給 remote scripting 方法並回傳給您的一個可選值。您可以在自己的回調函數中用自己覺得有用的任意方式使用該值。
例如,下面按鈕 btnSquare 的客戶腳本 onclick 處理程序調用服務器方法 square 來對文本框 txt1 中的指定數值進行平方運算。當執行了該方法後,它調用函數 showResults 。操作符名(“求平方”)在上下文參數中進行傳遞。
<SCRIPT LANGUAGE="JavaScript" for="btnSquare" event="onclick">
rsMath = RSGetASPObject("../myPages/RSMath.ASP")
number1 = txt1.value;
context = "squaring";
co = rsmath.square(number1,showResults,context);
</SCRIPT>
使用 RSExecute 而不用對象引用的同樣示例如下所示:
<SCRIPT LANGUAGE="JavaScript" for="btnSquare" event="onclick">
number1 = txt1.value;
context = "squaring";
co = RSExecute("RSmath.ASP","square",number1,showResults,context);
</SCRIPT>
函數 showResults 是先前示例的回調函數,可能如下所示:
<SCRIPT LANGUAGE="JavaScript">
function showResults(co){
typeOp = co.context;
rValue = co.return_value;
txt2.value = "Result of " + typeOp + " Operation = " + rValue;
}
<SCRIPT>
在這種情況下,showResults 函數可被用作一般意義上的回調函數,以顯示任何運算值。該函數指明用戶可能如何使用調用對象的 context 屬性(當調用 remote scripting 函數時對之進行初始化),以便於決定如何調用回調函數。
測試異步調用
用戶可以對某個遠程調用的狀態進行測試,以便於搞清調用是否成功。如果用戶已經進行了異步調用,那麼用戶可以測試是否已完成調用。
如何測試某個遠程調用的狀態
在調用腳本中,獲得調用對象的 status 屬性值,它可以包含下列值中的任一個:
值 描述
-1 失敗
0 完成
1 掛起(僅在異步調用過程中有效)。
下面的示例顯示了同步調用某個叫做 square 的 remote scripting 方法,然後在頁面上的某個文本框中顯示調用狀態的客戶腳本。
<SCRIPT LANGUAGE="JavaScript" for="btnSquare" event="onclick">
number1 = txt1.value;
context = "squaring";
co = RSExecute("RSmath.ASP","square",number1);
if (co.status == -1)
{txt2.value = "Call failed";}
else
{txt2.value = "Call succeeded, return value = " + co.return_value;} }
</SCRIPT>
關於錯誤的詳細信息,請參閱檢查錯誤。
控制異步調用
進行異步調用時,可用兩種方式來控制它:
等待調用完成。這將掛起客戶腳本處理,直到完成 remote scripting 調用,有效地將異步調用轉換為同步調用。如果您在自己的客戶腳本中到了異步調用提供所需信息的階段,那麼就可這樣做。為了等待,可以調用調用對象的等待方法。
取消調用,若要這樣做,可以調用調用對象的取消方法。