介绍ASP.NET AJAX
创始人
2024-04-19 11:30:15
0

一般来说,有成功就有失败,异步调用也是一样,会出现请求异常的情况。在传统的Ajax中,不论请求成功还是失败,回调函数都会被调用,然后我们可以判断 XMLHttpRequest对象的状态确定请求是否成功,如果失败了,可以进行异常处理。

但是,在ASP.NET AJAX应用中,只有成功时回调函数才会被调用,那么失败时怎么办?其实,ASP.NET AJAX允许我们在调用后台方法时指定两个回调函数,语法如下:

类名.方法名(参数1,参数2,……,参数n,请求成功时的回调函数,请求失败时的回调函数)

只不过在前面的应用中,我们省略了第二个回调函数。为了理解这个地方,我们做一个小实验,打开上一篇中的ASPNETAJAXTest这个程序,将ajax.js这个文件里的内容做如下修改:

ajax.js:

 

  1. //单击btnSayHello时调用的JS函数  
  2. function btnSayHello_onClick()   
  3. {   
  4. SayHelloService.SayHello(OnSucceeded,OnFailded);  
  5. }  
  6. //成功时的回调函数   
  7. function OnSucceeded(reusltText)   
  8. {  
  9. $get("result").innerHTML=reusltText;  
  10. }  
  11. //失败时的回掉函数  
  12. function OnFailded(error)  
  13. {  
  14. $get("result").innerHTML="调用失败。错误信息:"+error.get_message();  
  15. }  


其中异常时的回调函数有一个参数error,它是一个ASP.NET AJAX框架定义的一个对象,包含了异常信息。其中get_message()方法将返回异常信息字符串。

为了看效果,我们还要到WebService里搞一点破坏,让请求出现异常,“破坏”后的WebService如下:

 

  1. SayHelloService.cs:  
  2. using System;  
  3. using System.Web;using System.Collections;  
  4. using System.Web.Services;  
  5. using System.Web.Services.Protocols;using System.Web.Script.Services;  
  6. [WebService(Namespace = "http://tempuri.org/")]  
  7. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
  8. [ScriptService]public class SayHelloService  
  9. System.Web.Services.WebService{public SayHelloService() {   
  10. }  
  11. [WebMethod]public string SayHello(){  
  12. //Hello myHello = new Hello();  
  13. //return myHello.SayHello();         
  14. throw new Exception("我来搞破坏!");  
  15. }  


这里我们手工抛出了一个异常。下面运行程序,会得到如下结果:

 

如上图,当出现异常时,不仅自动调用了异常处理回调函数,还很方便地取得了错误信息。

本篇介绍了从JavaScript中调用WebService的一般方法、基本原理及使用异常处理,并且回答了上一篇留下的几个问题。然而还有一个问题没有讨论:到目前为止,我们调用的后台方法都是没有参数的,那么如果有参数,ASP.NET AJAX可以实现JavaScript变量类型和C#变量类型的自动转换吗?如果是复杂类型呢?如实体类、各种对象。再进一步,如果可以,应该怎么来做呢?我们将在下一篇讨论这个问题。

【编辑推荐】

  1. 浅谈ASP.NET MVC框架
  2. 介绍ASP.NET MVC中的MvcAjaxPanel
  3. ASP.NET MVC框架拯救UpdatePanel
  4. 用ASP.NET MVC源代码寻找解决方案
  5. ASP.NET MVC框架的ActionInvoker

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...