介紹ASP.NET AJAX
一般來說,有成功就有失敗,異步調用也是一樣,會出現請求異常的情況。在傳統的Ajax中,不論請求成功還是失敗,回調函數都會被調用,然后我們可以判斷 XMLHttpRequest對象的狀態確定請求是否成功,如果失敗了,可以進行異常處理。
但是,在ASP.NET AJAX應用中,只有成功時回調函數才會被調用,那么失敗時怎么辦?其實,ASP.NET AJAX允許我們在調用后臺方法時指定兩個回調函數,語法如下:
類名.方法名(參數1,參數2,……,參數n,請求成功時的回調函數,請求失敗時的回調函數)
只不過在前面的應用中,我們省略了第二個回調函數。為了理解這個地方,我們做一個小實驗,打開上一篇中的ASPNETAJAXTest這個程序,將ajax.js這個文件里的內容做如下修改:
ajax.js:
- //單擊btnSayHello時調用的JS函數
- function btnSayHello_onClick()
- {
- SayHelloService.SayHello(OnSucceeded,OnFailded);
- }
- //成功時的回調函數
- function OnSucceeded(reusltText)
- {
- $get("result").innerHTML=reusltText;
- }
- //失敗時的回掉函數
- function OnFailded(error)
- {
- $get("result").innerHTML="調用失敗。錯誤信息:"+error.get_message();
- }
其中異常時的回調函數有一個參數error,它是一個ASP.NET AJAX框架定義的一個對象,包含了異常信息。其中get_message()方法將返回異常信息字符串。
為了看效果,我們還要到WebService里搞一點破壞,讓請求出現異常,“破壞”后的WebService如下:
- SayHelloService.cs:
- using System;
- using System.Web;using System.Collections;
- using System.Web.Services;
- using System.Web.Services.Protocols;using System.Web.Script.Services;
- [WebService(Namespace = "http://tempuri.org/")]
- [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
- [ScriptService]public class SayHelloService
- System.Web.Services.WebService{public SayHelloService() {
- }
- [WebMethod]public string SayHello(){
- //Hello myHello = new Hello();
- //return myHello.SayHello();
- throw new Exception("我來搞破壞!");
- }
- }
這里我們手工拋出了一個異常。下面運行程序,會得到如下結果:
如上圖,當出現異常時,不僅自動調用了異常處理回調函數,還很方便地取得了錯誤信息。
本篇介紹了從JavaScript中調用WebService的一般方法、基本原理及使用異常處理,并且回答了上一篇留下的幾個問題。然而還有一個問題沒有討論:到目前為止,我們調用的后臺方法都是沒有參數的,那么如果有參數,ASP.NET AJAX可以實現JavaScript變量類型和C#變量類型的自動轉換嗎?如果是復雜類型呢?如實體類、各種對象。再進一步,如果可以,應該怎么來做呢?我們將在下一篇討論這個問題。
【編輯推薦】