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