介紹ASP.NET AJAX
一般來說,有成功就有失敗,異步調(diào)用也是一樣,會(huì)出現(xiàn)請求異常的情況。在傳統(tǒng)的Ajax中,不論請求成功還是失敗,回調(diào)函數(shù)都會(huì)被調(diào)用,然后我們可以判斷 XMLHttpRequest對象的狀態(tài)確定請求是否成功,如果失敗了,可以進(jìn)行異常處理。
但是,在ASP.NET AJAX應(yīng)用中,只有成功時(shí)回調(diào)函數(shù)才會(huì)被調(diào)用,那么失敗時(shí)怎么辦?其實(shí),ASP.NET AJAX允許我們在調(diào)用后臺方法時(shí)指定兩個(gè)回調(diào)函數(shù),語法如下:
類名.方法名(參數(shù)1,參數(shù)2,……,參數(shù)n,請求成功時(shí)的回調(diào)函數(shù),請求失敗時(shí)的回調(diào)函數(shù))
只不過在前面的應(yīng)用中,我們省略了第二個(gè)回調(diào)函數(shù)。為了理解這個(gè)地方,我們做一個(gè)小實(shí)驗(yàn),打開上一篇中的ASPNETAJAXTest這個(gè)程序,將ajax.js這個(gè)文件里的內(nèi)容做如下修改:
ajax.js:
- //單擊btnSayHello時(shí)調(diào)用的JS函數(shù)
- function btnSayHello_onClick()
- {
- SayHelloService.SayHello(OnSucceeded,OnFailded);
- }
- //成功時(shí)的回調(diào)函數(shù)
- function OnSucceeded(reusltText)
- {
- $get("result").innerHTML=reusltText;
- }
- //失敗時(shí)的回掉函數(shù)
- function OnFailded(error)
- {
- $get("result").innerHTML="調(diào)用失敗。錯(cuò)誤信息:"+error.get_message();
- }
其中異常時(shí)的回調(diào)函數(shù)有一個(gè)參數(shù)error,它是一個(gè)ASP.NET AJAX框架定義的一個(gè)對象,包含了異常信息。其中g(shù)et_message()方法將返回異常信息字符串。
為了看效果,我們還要到WebService里搞一點(diǎn)破壞,讓請求出現(xiàn)異常,“破壞”后的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("我來搞破壞!");
- }
- }
這里我們手工拋出了一個(gè)異常。下面運(yùn)行程序,會(huì)得到如下結(jié)果:
如上圖,當(dāng)出現(xiàn)異常時(shí),不僅自動(dòng)調(diào)用了異常處理回調(diào)函數(shù),還很方便地取得了錯(cuò)誤信息。
本篇介紹了從JavaScript中調(diào)用WebService的一般方法、基本原理及使用異常處理,并且回答了上一篇留下的幾個(gè)問題。然而還有一個(gè)問題沒有討論:到目前為止,我們調(diào)用的后臺方法都是沒有參數(shù)的,那么如果有參數(shù),ASP.NET AJAX可以實(shí)現(xiàn)JavaScript變量類型和C#變量類型的自動(dòng)轉(zhuǎn)換嗎?如果是復(fù)雜類型呢?如實(shí)體類、各種對象。再進(jìn)一步,如果可以,應(yīng)該怎么來做呢?我們將在下一篇討論這個(gè)問題。
【編輯推薦】