文档:调用RemoteScripting方法异步
Remotescripting向您提供了异步调用服务器方法的选择──当执行服务器方法时,用户的客户脚本继续运行。异步调用remotescripting方法使得您可以避免应用程序用户接口速度的减慢,因为您可以在执行服务器脚本的同时继续工作。
注意如果您的应用程序需要,那么也可以同步调用服务器方法。有关详细信息,请参阅同步调用RemoteScripting方法。
异步调用某个remotescript类似于同步调用。不过,当产生调用时,您要指定多至三个附加参数:
当服务器方法完成处理时,在用户的客户脚本中有一个被调用的javascriptcallbackfunction。例如,如果用户的remotescripting方法执行一次数据库检查,那么回调函数可能得到远程调用返回的检查值,并在页面上的某个控件中显示之。
一个可选的javascript错误回调函数──如果异步调用时遇到错误将调用之。
一个可选的上下文参数。这是用户传递给方法并在以后传回用户的数据。它典型地用于帮助您决定在自己的回调函数中正调用什么方法,例如,如果您正在将所有远程脚本调用回传给某个回调函数。
类似于同步调用,异步调用将创建一个调用对象,该对象支持包含被调用过程的返回值和状态信息的属性。例如,某个remotescripting方法的返回值可在调用对象的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在完成remotescripting调用时将被实例化的调用对象名。您无需创建在调用remotescript之前创建该对象;RSExecute方法为您创建该对象。
url包含您想要执行的远程脚本的ASP页的URL。服务器页必须已被配置为使得服务器页中的RemoteScripting有效中所描述的那样。服务器页必须在用户从中请求当前客户页的服务器上。
methodName您想要执行的服务器页上的方法名。
p1,p2,...methodName中方法所需要的任何参数。参数是通过值进行传递的。您可以传递简单的数据类型,比如数值或者文本值,但不能传递数组或者对象。
注意当把参数从客户传递给服务器时,它们被转换为字符串。要确保在使用这些参数值时,您的服务器方法将它们转换为合适的数据类型。有关详细信息,请参阅使得服务器页中的RemoteScripting有效。
callbackFunction您的客户脚本中javascript函数的函数指针,当完成对remotescripting方法的调用时将调用该函数。由于用户正在传递的是一个指针,因此不要在引号中包括其名字。在RSExecute调用中包括回调函数名意味着您想要异步执行remotescripting方法。
errorCallbackFunction用户的客户脚本中某个可选javascript函数的函数指针,如果remotescripting方法遇到一个错误,将调用该函数。由于您所传递的是一个指针,因此不要在引号中包括其名。关于remotescripting中错误的详细信息,请参阅检查错误。
context您传递给remotescripting方法并回传给您的一个可选值。您可以在自己的回调函数中用自己觉得有用的任意方式使用该值。
例如,下面按钮btnSquare的客户脚本onclick处理程序调用服务器方法square来对文本框txt1中的指定数值进行平方运算。当执行了该方法后,它调用函数showResults。操作符名(“求平方”)在上下文参数中进行传递。
<SCRIPTLANGUAGE="javascript"for="btnSquare"event="onclick">
rsMath=RSGetASPObject("../myPages/RSMath.asp")
number1=txt1.value;
context="squaring";
co=rsmath.square(number1,showResults,context);
</SCRIPT>
使用RSExecute而不用对象引用的同样示例如下所示:
<SCRIPTLANGUAGE="javascript"for="btnSquare"event="onclick">
number1=txt1.value;
context="squaring";
co=RSExecute("RSmath.asp","square",number1,showResults,context);
</SCRIPT>
函数showResults是先前示例的回调函数,可能如下所示:
<SCRIPTLANGUAGE="javascript">
functionshowResults(co){
typeOp=co.context;
rValue=co.return_value;
txt2.value="Resultof"+typeOp+"operation="+rValue;
}
<SCRIPT>
在这种情况下,showResults函数可被用作一般意义上的回调函数,以显示任何运算值。该函数指明用户可能如何使用调用对象的context属性(当调用remotescripting函数时对之进行初始化),以便于决定如何调用回调函数。
测试异步调用
用户可以对某个远程调用的状态进行测试,以便于搞清调用是否成功。如果用户已经进行了异步调用,那么用户可以测试是否已完成调用。
如何测试某个远程调用的状态
在调用脚本中,获得调用对象的status属性值,它可以包含下列值中的任一个:
值描述
-1失败
0完成
1挂起(仅在异步调用过程中有效)。
下面的示例显示了同步调用某个叫做square的remotescripting方法,然后在页面上的某个文本框中显示调用状态的客户脚本。
<SCRIPTLANGUAGE="javascript"for="btnSquare"event="onclick">
number1=txt1.value;
context="squaring";
co=RSExecute("RSmath.asp","square",number1);
if(co.status==-1)
{txt2.value="Callfailed";}
else
{txt2.value="Callsucceeded,returnvalue="+co.return_value;}}
</SCRIPT>
关于错误的详细信息,请参阅检查错误。
控制异步调用
进行异步调用时,可用两种方式来控制它:
等待调用完成。这将挂起客户脚本处理,直到完成remotescripting调用,有效地将异步调用转换为同步调用。如果您在自己的客户脚本中到了异步调用提供所需信息的阶段,那么就可这样做。为了等待,可以调用调用对象的等待方法。
取消调用,若要这样做,可以调用调用对象的取消方法。