文档:调用RemoteScripting方法同步
在对某个客户页和某个服务器页上的remotescripting进行配置后,您就可以从自己的客户脚本调用该服务器页的方法了。缺省的情况是,当用户调用某个服务器方法时,它被同步执行──您的客户脚本直到服务器方法执行完毕并返回结果后才能停止运行。一般说来,当您在自己的客户脚本中需要服务器方法结果时,则需同步调用服务器方法。
注意您也可以异步调用服务器方法。有关详细信息,请参阅异步调用RemoteScripting方法。
当您调用某个服务器方法时,该方法并不返回单个值。而是创建一个callobject,它是一个包含了被调用过程的返回和状态信息的对象。最常用的属性是调用对象的return_value属性,它包含了远程过程计算或者检查出来的单个值。其他调用对象属性使得用户可以得到更多关于远程过程调用的状态信息。
如果您已经创建了对某个服务器页的对象引用,那么可以用标准object.method语法来调用方法。有关创建对象引用的详细信息,请参阅作为对象引用ASP页。另外,您也可以在没有任何对象引用时调用remotescripting方法。这样做比起使用object.method语法来要略微冗余些,但不需要用户首先创建对象引用。
同步调用服务器方法
如果用户创建了对服务器页的对象引用,那么对于使用javascript的调用,可用第一个语法示例,而对于使用VBScript的调用,可用第二种语法示例:
javascript:
callObject=ASPObject.methodName(p1,p2[,...])
vbscript:
setcallObject=ASPObject.methodName(p1,p2[,...])
-或者-
如果用户没有创建对象引用,调用RSExecute函数。对于使用javascript的调用,使用第一个语法示例,而对于使用VBScript的调用,使用第二种语法示例:
javascript:
callobject=RSExecute(url,methodName,p1,p2[,...])
vbscript:
setcallobject=RSExecute(url,methodName,p1,p2[,...])
其中:
callObject在remotescripting调用完成后,将被实例化的调用对象名。您无需在调用remotescript之前创建该对象;远程脚本调用为您创建之。
ASPObject您在早期使用RSGetASPObject方法可选择地创建的对象引用。有关详细信息,请参阅作为对象引用ASP页。
url包含您想要执行的远程脚本的ASP页的URL。必须已将服务器页配置为使得服务器页中的RemoteScripting有效中所描述的那样。服务器页必须在用户从中请求当前客户页的服务器上。
methodName您想要执行的服务器页上的方法名。
p1,p2,...methodName中的方法所需要的任何参数。参数是通过值来传递的。用户可以传递简单的数据类型,比如数值或者文本值,但不能传递结构化数据,比如数组或者对象。
注意当把参数从客户传递给服务器时,它们被转换为字符串。要确保您的服务器方法在使用参数时,将之转换为合适的数据类型。有关详细问题,请参阅使得服务器页中的RemoteScripting有效。
例如,下面按钮btnAdd的客户脚本onclick处理程序调用服务器方法add来累加两个数值。调用remotescripting方法会创建一个名为co的调用对象。remotescripting调用的结果从调用对象的return_value属性中提取出来,并作为名为txt3的文本框值显示出来。
<SCRIPTLANGUAGE="javascript"for="btnAdd"event="onclick">
rsMath=RSGetASPObject("../myPages/RSMath.asp")
number1=txt1.value;
number2=txt2.value;
co=rsMath.Add(number1,number2);
txt3.value="Thesumis"+co.return_value;
</SCRIPT>
在无对象引用情况下所产生的同样调用(用RSExecute)可能如下所示:
<SCRIPTLANGUAGE="javascript"for="btnAdd"event="onclick">
number1=txt1.value;
number2=txt2.value;
co=RSExecute("RSmath.asp","add",number1,number2);
txt3.value="Thesumis"+co.return_value;
</SCRIPT>
有关在产生remotescripting调用时,如何检查错误的详细信息,请参阅检查错误。