直播中
注意 如果您的應(yīng)用程序需要,那么也可以同步調(diào)用服務(wù)器方法。有關(guān)詳細(xì)信息,請(qǐng)參閱同步調(diào)用 Remote Scripting 方法。
異步調(diào)用某個(gè) remote script 類似于同步調(diào)用。不過(guò),當(dāng)產(chǎn)生調(diào)用時(shí),您要指定多至三個(gè)附加參數(shù):
當(dāng)服務(wù)器方法完成處理時(shí),在用戶的客戶腳本中有一個(gè)被調(diào)用的 JavaScript callback function 。例如,如果用戶的 remote scripting 方法執(zhí)行一次數(shù)據(jù)庫(kù)檢查,那么回調(diào)函數(shù)可能得到遠(yuǎn)程調(diào)用返回的檢查值,并在頁(yè)面上的某個(gè)控件中顯示之。
一個(gè)可選的 JavaScript 錯(cuò)誤回調(diào)函數(shù)──如果異步調(diào)用時(shí)遇到錯(cuò)誤將調(diào)用之。
一個(gè)可選的上下文參數(shù)。這是用戶傳遞給方法并在以后傳回用戶的數(shù)據(jù)。它典型地用于幫助您決定在自己的回調(diào)函數(shù)中正調(diào)用什么方法,例如,如果您正在將所有遠(yuǎn)程腳本調(diào)用回傳給某個(gè)回調(diào)函數(shù)。
類似于同步調(diào)用,異步調(diào)用將創(chuàng)建一個(gè)調(diào)用對(duì)象,該對(duì)象支持包含被調(diào)用過(guò)程的返回值和狀態(tài)信息的屬性。例如,某個(gè) remote scripting 方法的返回值可在調(diào)用對(duì)象的 return_value 屬性中獲得。在異步調(diào)用時(shí),調(diào)用對(duì)象 status 屬性向用戶提供關(guān)于調(diào)用狀態(tài)的信息。
當(dāng)您產(chǎn)生異步調(diào)用時(shí),調(diào)用對(duì)象作為一個(gè)參數(shù)傳遞到回調(diào)函數(shù)中。這樣您就可以在調(diào)用腳本中對(duì)其進(jìn)行測(cè)試(例如,決定呼叫的狀態(tài)),或者在回調(diào)函數(shù)中測(cè)試(例如,獲得方法的返回值)。
如果您已經(jīng)創(chuàng)建了對(duì)某個(gè)服務(wù)器頁(yè)的對(duì)象引用,那么您就可以用標(biāo)準(zhǔn)的 object.method 語(yǔ)法來(lái)調(diào)用方法。有關(guān)創(chuàng)建對(duì)象引用的詳細(xì)信息,請(qǐng)參閱作為對(duì)象引用 ASP 頁(yè)。
如何異步調(diào)用服務(wù)器方法
如果用戶已經(jīng)創(chuàng)建了對(duì)服務(wù)器頁(yè)的對(duì)象引用,那么可以用下面的語(yǔ)法。由于您必須傳遞回調(diào)函數(shù)的函數(shù)指針,因此對(duì)于異步方法調(diào)用來(lái)說(shuō),您必須用 JavaScript。
callObject = ASPObject. methodName(p1, p2[,...],
callbackFunction, errorCallbackFunction, context)
- 或者 -
如果您尚未創(chuàng)建對(duì)象引用,那么可以調(diào)用 RSExecute 函數(shù),所用語(yǔ)法如下:
callobject = RSExecute(url, methodName, p1, p2[,...],
callbackFunction, errorCallbackFunction, context)
其中:
ASPObject 您先前用 RSGetASPObject 方法創(chuàng)建的對(duì)象引用。有關(guān)詳細(xì)信息,請(qǐng)參閱作為對(duì)象引用 ASP 頁(yè)。
callObject 在完成 remote scripting 調(diào)用時(shí)將被實(shí)例化的調(diào)用對(duì)象名。您無(wú)需創(chuàng)建在調(diào)用 remote script 之前創(chuàng)建該對(duì)象;RSExecute 方法為您創(chuàng)建該對(duì)象。
url 包含您想要執(zhí)行的遠(yuǎn)程腳本的 ASP 頁(yè)的 URL。服務(wù)器頁(yè)必須已被配置為使得服務(wù)器頁(yè)中的 Remote Scripting 有效中所描述的那樣。服務(wù)器頁(yè)必須在用戶從中請(qǐng)求當(dāng)前客戶頁(yè)的服務(wù)器上。
methodName 您想要執(zhí)行的服務(wù)器頁(yè)上的方法名。
p1, p2, ... methodName 中方法所需要的任何參數(shù)。參數(shù)是通過(guò)值進(jìn)行傳遞的。您可以傳遞簡(jiǎn)單的數(shù)據(jù)類型,比如數(shù)值或者文本值,但不能傳遞數(shù)組或者對(duì)象。
注意 當(dāng)把參數(shù)從客戶傳遞給服務(wù)器時(shí),它們被轉(zhuǎn)換為字符串。要確保在使用這些參數(shù)值時(shí),您的服務(wù)器方法將它們轉(zhuǎn)換為合適的數(shù)據(jù)類型。有關(guān)詳細(xì)信息,請(qǐng)參閱使得服務(wù)器頁(yè)中的 Remote Scripting 有效。
callbackFunction 您的客戶腳本中 JavaScript 函數(shù)的函數(shù)指針,當(dāng)完成對(duì) remote scripting 方法的調(diào)用時(shí)將調(diào)用該函數(shù)。由于用戶正在傳遞的是一個(gè)指針,因此不要在引號(hào)中包括其名字。在 RSExecute 調(diào)用中包括回調(diào)函數(shù)名意味著您想要異步執(zhí)行 remote scripting 方法。
errorCallbackFunction 用戶的客戶腳本中某個(gè)可選 JavaScript 函數(shù)的函數(shù)指針,如果 remote scripting 方法遇到一個(gè)錯(cuò)誤,將調(diào)用該函數(shù)。由于您所傳遞的是一個(gè)指針,因此不要在引號(hào)中包括其名。關(guān)于 remote scripting 中錯(cuò)誤的詳細(xì)信息,請(qǐng)參閱檢查錯(cuò)誤。
context 您傳遞給 remote scripting 方法并回傳給您的一個(gè)可選值。您可以在自己的回調(diào)函數(shù)中用自己覺(jué)得有用的任意方式使用該值。
例如,下面按鈕 btnSquare 的客戶腳本 onclick 處理程序調(diào)用服務(wù)器方法 square 來(lái)對(duì)文本框txt1中的指定數(shù)值進(jìn)行平方運(yùn)算。當(dāng)執(zhí)行了該方法后,它調(diào)用函數(shù) showResults 。操作符名(“求平方”)在上下文參數(shù)中進(jìn)行傳遞。
<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 而不用對(duì)象引用的同樣示例如下所示:
<SCRIPT LANGUAGE="JavaScript" for="btnSquare" event="onclick">
number1 = txt1.value;
context = "squaring";
co = RSExecute("RSmath.asp","square",number1,showResults,context);
</SCRIPT>
函數(shù) showResults 是先前示例的回調(diào)函數(shù),可能如下所示:
<SCRIPT LANGUAGE="JavaScript">
function showResults(co){
typeOp = co.context;
rValue = co.return_value;
txt2.value = "Result of " + typeOp + " operation = " + rValue;
}
<SCRIPT>
在這種情況下,showResults 函數(shù)可被用作一般意義上的回調(diào)函數(shù),以顯示任何運(yùn)算值。該函數(shù)指明用戶可能如何使用調(diào)用對(duì)象的 context 屬性(當(dāng)調(diào)用 remote scripting 函數(shù)時(shí)對(duì)之進(jìn)行初始化),以便于決定如何調(diào)用回調(diào)函數(shù)。
測(cè)試異步調(diào)用
用戶可以對(duì)某個(gè)遠(yuǎn)程調(diào)用的狀態(tài)進(jìn)行測(cè)試,以便于搞清調(diào)用是否成功。如果用戶已經(jīng)進(jìn)行了異步調(diào)用,那么用戶可以測(cè)試是否已完成調(diào)用。
如何測(cè)試某個(gè)遠(yuǎn)程調(diào)用的狀態(tài)
在調(diào)用腳本中,獲得調(diào)用對(duì)象的 status 屬性值,它可以包含下列值中的任一個(gè):
值 描述
-1 失敗
0 完成
1 掛起(僅在異步調(diào)用過(guò)程中有效)。
下面的示例顯示了同步調(diào)用某個(gè)叫做 square 的 remote scripting 方法,然后在頁(yè)面上的某個(gè)文本框中顯示調(diào)用狀態(tài)的客戶腳本。
<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>
關(guān)于錯(cuò)誤的詳細(xì)信息,請(qǐng)參閱檢查錯(cuò)誤。
控制異步調(diào)用
進(jìn)行異步調(diào)用時(shí),可用兩種方式來(lái)控制它:
等待調(diào)用完成。這將掛起客戶腳本處理,直到完成 remote scripting 調(diào)用,有效地將異步調(diào)用轉(zhuǎn)換為同步調(diào)用。如果您在自己的客戶腳本中到了異步調(diào)用提供所需信息的階段,那么就可這樣做。為了等待,可以調(diào)用調(diào)用對(duì)象的等待方法。
取消調(diào)用,若要這樣做,可以調(diào)用調(diào)用對(duì)象的取消方法。