文档:检查错误
当您在服务器脚本中用remotescripting调用方法时,可能会遇到多种错误,包括语法错误和运行时间错误,以及调用remotescripting方法时的错误。remotescripting调用机制向您提供了获知调用过程中所出现错误信息的途径。
错误处理程序根据您是进行同步或者异步调用稍微有些不一样。如果您在进行同步调用时导致错误,那么remotescripting机制将在浏览器中显示一条错误消息。错误文字来自于调用对象的message属性。有关详细信息,请参阅如下的“RemoteScripting调用故障诊断”。
不过,如果您产生导致一个错误的异步调用,那么您可以通过指定一个错误回调函数捕获该错误,该回调函数的调用在很大程度上和普通回调函数有相似之处。
捕获异步调用中产生的错误
您可以指定自己异步remotescripting调用中的错误回调函数名。由于您必须传递该回调函数的函数指针,因此对于异步方法调用来说,您必须使用javascript。如果您已经创建了对服务器页的对象引用,那么可以用第一个语法示例。否则可以用第二个语法示例。
callObject=ASPObject.methodName(p1,p2[,...],
callbackFunction,errorCallbackFunction,context)
callobject=RSExecute(url,methodName,p1,p2[,...],
callbackFunction,errorCallbackFunction,context)
有关产生对服务器方法异步调用的详细信息,请参阅异步调用RemoteScripting方法。
不管您进行同步还是异步调用,都可以得到关于错误条件的信息,方法是测试调用对象的属性。如果用户指定了错误回调函数,那么调用对象就被作为参数传递,就象普通回调函数参数传递一样。特别是下面的属性提供了错误信息:
status如果远程调用失败则包含-1。
data包含服务器返回的XML格式的粗信息。这是调试的最好信息源,因为它包含了错误消息的完整文本以及服务器生成的其他消息。
message包含remotescripting代理过程生成的错误消息信息(如果有的话)。message中的错误消息不必要和data属性中的一样。例如,如果ASP页包含一条语法错误,那么关于该错误的详细消息将出现在data属性中,但消息属性将只包含这样一条消息──它指示用户不能调用ASP页上的方法。
下面的脚本示例了客户脚本中的一个错误回调函数。第一个脚本产生一个remotescripting调用,并指明错误回调函数。第二个脚本是错误回调函数本身。错误回调函数并不显式地对调用对象status属性值进行测试,因为该函数仅在调用失败时才被调用。
<SCRIPTLANGUAGE="javascript"for="btnSquare"event="onclick">
rsMath=RSGetASPObject("rsadd.asp");
number1=txt1.value;
context="squaring";
co=rsMath.square(number1,showResults,showErrors,context);
functionshowErrors(co){
//转储粗数据
msg="Therawdatareturnedbytheremotemethodcallis"
msg=msg+co.data
alert(msg);
//显示友好信息
msg="Thefollowingerroroccurredduringthe"
msg=msg+co.context
msg=msg+"remotescriptingcall:n"
msg=msg+co.message
alert(msg);
}
</SCRIPT>
RemoteScripting调用故障诊断
找到某个remotescripting调用中的确切错误源并不总是一件容易的事情,因为remotescripting不仅涉及到客户而且涉及到服务器上的多个文件。不过,某些类型的错误属于一般性错误,而且容易发现。另外,用户可以用remotescripting机制的错误捕获程序获得调用过程中所出现错误的详细信息。
在某些情况下,用户不能用remotescripting进行任何处理,因为尚未对之进行正确的初始化。下表列出了典型的初始化错误及其可能的出错缘由。
症状可能错因
Remotescripting不起作用;客户页源仅包含<APPLET>标记。RSEnableRemoteScripting
调用不在文档主体内。请参阅使得客户页内的RemoteScripting有效。
Remotescripting不起作用;所有调用失败。ASP页未被调用。使用http://协议(而不是file://)。
客户端错误消息,比如当试图调用remotescripting方法时,出现“未定义'MSRS'”消息。试图进行远程调用之前,未能成功调用RSEnableRemoteScripting方法。
客户端错误消息“对象不支持该属性或者方法,”特别显示出和.HTM文件不匹配的行号。找不到代理对象(Rsproxy.class),或者RSEnableRemoteScripting方法中传递的是无效URL。
客户端错误消息“创建文件的ASP对象失败”。RSGetASPObject调用中传递的是无效URL。请参阅作为对象引用ASP页。
如果错误位于包含远程调用方法的ASP页中,或者如果错误出现在对某个远程方法的调用过程中,那么用户可以在某个错误回调函数中捕获该错误,而且用户可以从调用对象的data和message属性中获得关于错误的信息。
下表列出了用户可以用错误回调函数捕获的典型问题以及message和data属性中的值。在多数情况下,message属性返回一般性信息,而data属性则包含关于错误的详细信息。
注意数据属性包含一定数目的XML标记以及和调用有关的其他信息。下表列出了出现在属性值中的一个字符串。
问题消息值数据值
RSExecute方法中ASP页的无效URL。请参阅同步调用RemoteScripting方法和异步调用RemoteScripting方法不同的,包括用户试图调用的页名。(null)
ASP文件到Rs.asp的路径错误。请参阅使得服务器页中的RemoteScripting有效。“调用的页不支持remotescripting。”“未找到包括文件。”
ASP文件中的语法或者运行时间错误。“调用的页不支持remotescripting。”和错误有关的细节,包括行号。
试图调用不存在的方法。“不是公用函数。”“不是公用函数。”
ASP构造函数引用了未出现在ASP文件中的函数。请参阅使得服务器页中的RemoteScripting有效“调用的页不支持remotescripting。”“functionName未定义。”