直播中
錯誤處理程序根據(jù)您是進(jìn)行同步或者異步調(diào)用稍微有些不一樣。如果您在進(jìn)行同步調(diào)用時導(dǎo)致錯誤,那么 remote scripting 機(jī)制將在瀏覽器中顯示一條錯誤消息。錯誤文字來自于調(diào)用對象的 message 屬性。有關(guān)詳細(xì)信息,請參閱如下的“Remote Scripting 調(diào)用故障診斷”。
不過,如果您產(chǎn)生導(dǎo)致一個錯誤的異步調(diào)用,那么您可以通過指定一個錯誤回調(diào)函數(shù)捕獲該錯誤,該回調(diào)函數(shù)的調(diào)用在很大程度上和普通回調(diào)函數(shù)有相似之處。
捕獲異步調(diào)用中產(chǎn)生的錯誤
您可以指定自己異步 remote scripting 調(diào)用中的錯誤回調(diào)函數(shù)名。由于您必須傳遞該回調(diào)函數(shù)的函數(shù)指針,因此對于異步方法調(diào)用來說,您必須使用 JavaScript。如果您已經(jīng)創(chuàng)建了對服務(wù)器頁的對象引用,那么可以用第一個語法示例。否則可以用第二個語法示例。
callObject = ASPObject.methodName(p1, p2[,...],
callbackFunction, errorCallbackFunction, context)
callobject = RSExecute(url, methodName, p1, p2[,...],
callbackFunction, errorCallbackFunction, context)
有關(guān)產(chǎn)生對服務(wù)器方法異步調(diào)用的詳細(xì)信息,請參閱異步調(diào)用 Remote Scripting 方法。
不管您進(jìn)行同步還是異步調(diào)用,都可以得到關(guān)于錯誤條件的信息,方法是測試調(diào)用對象的屬性。如果用戶指定了錯誤回調(diào)函數(shù),那么調(diào)用對象就被作為參數(shù)傳遞,就象普通回調(diào)函數(shù)參數(shù)傳遞一樣。特別是下面的屬性提供了錯誤信息:
status 如果遠(yuǎn)程調(diào)用失敗則包含 -1。
data 包含服務(wù)器返回的 XML 格式的粗信息。這是調(diào)試的最好信息源,因為它包含了錯誤消息的完整文本以及服務(wù)器生成的其他消息。
message 包含 remote scripting 代理過程生成的錯誤消息信息(如果有的話)。 message 中的錯誤消息不必要和 data 屬性中的一樣。例如,如果 ASP 頁包含一條語法錯誤,那么關(guān)于該錯誤的詳細(xì)消息將出現(xiàn)在 data 屬性中,但消息屬性將只包含這樣一條消息──它指示用戶不能調(diào)用 ASP 頁上的方法。
下面的腳本示例了客戶腳本中的一個錯誤回調(diào)函數(shù)。第一個腳本產(chǎn)生一個 remote scripting 調(diào)用,并指明錯誤回調(diào)函數(shù)。第二個腳本是錯誤回調(diào)函數(shù)本身。錯誤回調(diào)函數(shù)并不顯式地對調(diào)用對象 status 屬性值進(jìn)行測試,因為該函數(shù)僅在調(diào)用失敗時才被調(diào)用。
<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){
// 轉(zhuǎn)儲粗?jǐn)?shù)據(jù)
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:\n"
msg = msg + co.message
alert(msg);
}
</SCRIPT>
Remote Scripting 調(diào)用故障診斷
找到某個 remote scripting 調(diào)用中的確切錯誤源并不總是一件容易的事情,因為 remote scripting 不僅涉及到客戶而且涉及到服務(wù)器上的多個文件。不過,某些類型的錯誤屬于一般性錯誤,而且容易發(fā)現(xiàn)。另外,用戶可以用 remote scripting 機(jī)制的錯誤捕獲程序獲得調(diào)用過程中所出現(xiàn)錯誤的詳細(xì)信息。
在某些情況下,用戶不能用 remote scripting 進(jìn)行任何處理,因為尚未對之進(jìn)行正確的初始化。下表列出了典型的初始化錯誤及其可能的出錯緣由。
癥狀 可能錯因
Remote scripting 不起作用;客戶頁源僅包含 <APPLET> 標(biāo)記。 RSEnableRemoteScripting 調(diào)用不在文檔主體內(nèi)。請參閱使得客戶頁內(nèi)的 Remote Scripting 有效。
Remote scripting 不起作用;所有調(diào)用失敗。 ASP 頁未被調(diào)用。使用http://協(xié)議(而不是file://)。
客戶端錯誤消息,比如當(dāng)試圖調(diào)用 remote scripting 方法時,出現(xiàn)“未定義 'MSRS' ”消息。 試圖進(jìn)行遠(yuǎn)程調(diào)用之前,未能成功調(diào)用 RSEnableRemoteScripting 方法。
客戶端錯誤消息“對象不支持該屬性或者方法,”特別顯示出和 .HTM 文件不匹配的行號。 找不到代理對象 (Rsproxy.class),或者RSEnableRemoteScripting方法中傳遞的是無效 URL。
客戶端錯誤消息“創(chuàng)建文件的 ASP 對象失敗”。 RSGetASPObject 調(diào)用中傳遞的是無效 URL。請參閱作為對象引用 ASP 頁。
如果錯誤位于包含遠(yuǎn)程調(diào)用方法的 ASP 頁中,或者如果錯誤出現(xiàn)在對某個遠(yuǎn)程方法的調(diào)用過程中,那么用戶可以在某個錯誤回調(diào)函數(shù)中捕獲該錯誤,而且用戶可以從調(diào)用對象的 data 和 message 屬性中獲得關(guān)于錯誤的信息。
下表列出了用戶可以用錯誤回調(diào)函數(shù)捕獲的典型問題以及 message 和 data 屬性中的值。在多數(shù)情況下, message 屬性返回一般性信息,而 data 屬性則包含關(guān)于錯誤的詳細(xì)信息。
注意 數(shù)據(jù)屬性包含一定數(shù)目的 XML 標(biāo)記以及和調(diào)用有關(guān)的其他信息。下表列出了出現(xiàn)在屬性值中的一個字符串。
問題 消息值 數(shù)據(jù)值
RSExecute 方法中 ASP 頁的無效 URL。請參閱同步調(diào)用 Remote Scripting 方法和異步調(diào)用 Remote Scripting 方法 不同的,包括用戶試圖調(diào)用的頁名。 (null)
ASP 文件到 Rs.asp 的路徑錯誤。請參閱使得服務(wù)器頁中的 Remote Scripting 有效。 “調(diào)用的頁不支持 remote scripting?!?“未找到包括文件。”
ASP 文件中的語法或者運行時間錯誤。 “調(diào)用的頁不支持 remote scripting?!?和錯誤有關(guān)的細(xì)節(jié),包括行號。
試圖調(diào)用不存在的方法。 “不是公用函數(shù)?!?“不是公用函數(shù)?!?
ASP 構(gòu)造函數(shù)引用了未出現(xiàn)在 ASP 文件中的函數(shù)。請參閱使得服務(wù)器頁中的 Remote Scripting 有效 “調(diào)用的頁不支持 remote scripting。” “functionName未定義。”