btnInvoke的click事件的處理函數為btnInvoke_onclick(),其代碼如下:
function btnInvoke_onclick() {
var a = $get("tbA").value;
var b = $get("tbB").value;
MathService.Divide(a, b, onSucceeded, onFailed);
}
注意其中粗體部分,即調用Web Service客戶端代理的一行。其中不但傳入了被除數和除數(a和b),還傳入了成功調用后的回調函數onSucceeded以及失敗時的回調函數onFailed。
成功調用時的回調函數onSucceeded()比較簡單,這里不贅:
function onSucceeded(result) {
$get("btnInvoke").value = result;
$get("result").innerHTML = "";
}
失敗時的回調函數onFailed()才是本示例程序的重點:
function onFailed(error) {
// 取得異常信息。
var stackTrace = error.get_stackTrace();
var message = error.get_message();
var statusCode = error.get_statusCode();
var exceptionType = error.get_exceptionType();
var timeout = error.get_timedOut();
// 顯示異常信息。
$get("result").innerHTML =
"<strong>Stack Trace: </strong>" + stackTrace + "<br/>" +
"<strong>Service Error: </strong>" + message + "<br/>" +
"<strong>Status Code: </strong>" + statusCode + "<br/>" +
"<strong>Exception Type: </strong>" + exceptionType + "<br/>" +
"<strong>Is Timeout: </strong>" + timeout;
$get("btnInvoke").value = "?";
}
可以看到,onFailed()函數首先取得了傳遞進來的Sys.Net.WebServiceError對象的各個屬性,然后再依次顯示到id為result的<div />中。
這樣就完成了本示例程序的編寫。運行該程序并嘗試做一些除法,若程序編寫正確的話,你將看到如圖3-4、圖3-5和圖3-6所示的界面。
當然,本示例程序的目的是為了演示調用服務器端Web Service時發生異常的處理方法,所以自然事無巨細地將所有異常信息均顯示了出來。而在實際開發中,我們則不應該完整顯示出此類唐突的異常細節。通常的做法是根據不同的異常進行相應的處理,并在需要的情況下再為用戶顯示出相對友好的提示消息。
文章來源于領測軟件測試網 http://www.kjueaiud.com/