AJAX 自定义异常管理

原创 2007年10月13日 21:19:00
 
一.在服务端自定义异常处理
1.添加ASPX页面并切换到设计视图。
2.在工具箱中AJAX Extensions标签下双击ScriptManager和UpdatePanel控件添加到页面中。
3.在UpdatePanel控件中添加两个TextBox,一个Label,一个Button和一些文字,并设置Button的Text属性值为“Calculate”。
4.双击Calculate按钮并添加如下代码到事件处理中。
protected void Button1_Click(object sender, EventArgs e)
{
    
try
    
{
        
int a = Int32.Parse(TextBox1.Text);

        
int b = Int32.Parse(TextBox2.Text);

        
int res = a / b;

        Label1.Text 
= res.ToString();
    }


    
catch (Exception ex)
    
{
        
if (TextBox1.Text.Length > 0 && TextBox2.Text.Length > 0)
        
{
            ex.Data[
"ExtraInfo"= " You can't divide " +

                TextBox1.Text 
+ " by " + TextBox2.Text + ".";

        }

        
throw ex;
    }

}
在事件处理代码中包含了一个try-catch语句块,在try中进行除法运算,如果运算失败,在catch中设置ExtraInfo信息并重新抛出异常。
5.切换到设计视图并选择ScriptManager控件。
6.在属性窗口中的工具栏中,选择事件按钮,并双击AsyncPostBackError。
7.添加如下代码到AsyncPostBackError事件处理。
protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
{
    
if (e.Exception.Data["ExtraInfo"!= null)
    
{
        ScriptManager1. AsyncPostBackErrorMessage 
=

            e.Exception.Message 
+

            e.Exception.Data[
"ExtraInfo"].ToString();

    }

    
else
    
{       ScriptManager1.AsyncPostBackErrorMessage =

            
"An unspecified error occurred.";
    }

}
检测异常的ExtraInfo是否为空,并设置为ScriptManager控件的AsyncPostBackErrorMessage,如果不设置则会创建一个默认的异常。
8.保存并按Ctrl + F5运行。
9.在每一个文本框中输入大于零的数,并单击Calculate按钮提交成功。
10.在第二个文本框中输入0,单击Calculate将会引发一个异常。浏览器将会显示一个对话框,提示的信息为我们在服务端设置的信息。
二.在客户端脚本中自定义异常处理
前面的异常处理是在服务端通过设置ScriptManager控件的属性来进行处理,下面将看一下如何在客户端脚本中使用PageRequestManager类来进行异常处理,并用<div>元素来代替浏览器默认的Alert对话框。
1.在我们前面创建的页面中,切换到代码视图。
2.添加如下的HTML元素到页面中(官方文档中有点错误).在HEAD元素中添加如下样式标记。.切换到设计视图并确保你的页面如下所示。
<div id="AlertDiv" language="javascript" onclick="return AlertDiv_onclick()">

    
<div id="AlertMessage">

    
</div>

    
<br />

    
<div id="AlertButtons">

        
<input id="OKButton" type="button" value="OK" runat="server" onclick="ClearErrorState()" />

    
</div>

</div>
3
<style type="text/css">

    #UpdatePanel1 
{

      width
: 200px; height: 50px;

      border
: solid 1px gray;

    
}


    #AlertDiv
{

    left
: 40%; top: 40%;

    position
: absolute; width: 200px;

    padding
: 12px; 

    border
: #000000 1px solid;

    background-color
: white; 

    text-align
: left;

    visibility
: hidden;

    z-index
: 99;

    
}


    #AlertButtons
{

    position
: absolute; right: 5%; bottom: 5%;

    
}


</style>
4
5.在属性窗口中的下拉列表中选择DOCUMENT元素(它对应的是页面<Body>元素),设置Id属性值为bodytag。
6.切换到代码视图。
7.添加如下<script>代码块。
<script type="text/javascript" language="javascript">

var divElem = 'AlertDiv';

var messageElem = 'AlertMessage';

var bodyTag = 'bodytag';

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

function ToggleAlertDiv(visString)

{

     
if (visString == 'hidden')

     
{

         $get(bodyTag).style.backgroundColor 
= 'white';                         

     }


     
else

     
{

         $get(bodyTag).style.backgroundColor 
= 'gray';                         

 

     }


     
var adiv = $get(divElem);

     adiv.style.visibility 
= visString;

 

}


function ClearErrorState() {

     $get(messageElem).innerHTML 
= '';

     ToggleAlertDiv('hidden');                     

}


function EndRequestHandler(sender, args)

{

   
if (args.get_error() != undefined)

   
{

       
var errorMessage;

       
if (args.get_response().get_statusCode() == '200')

       
{

           errorMessage 
= args.get_error().message;

       }


       
else

       
{

           
// Error occurred somewhere other than the server page.

           errorMessage 
= 'An unspecified error occurred. ';

       }


       args.set_errorHandled(
true);

       ToggleAlertDiv('visible');

       $get(messageElem).innerHTML 
= errorMessage;

   }


}


</script>
在代码块中,主要做以下几件事:
1)定义PageRequestManager类的endRequest事件处理,在事件处理中,当有错误发生时将显示AlertDiv。
2)定义ToggleAlertDiv函数,当有错误发生时它用来显示或者隐藏AlertDiv元素,并且改变页面的背景颜色。
3)定义ClearErrorState函数,它用来隐藏错误信息的UI。
8.保存并按Ctrl + F5运行。
9.在每一个文本框中输入大于零的数,并单击Calculate按钮提交成功。
10.在第二个文本框中输入0,单击Calculate将会引发一个异常。这时自定义的AlertDiv将会显示出来代替了默认的Alert对话框,如下图所示:

JQuery $.ajax 如何捕获异常信息?

下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址。 type String ...
  • wenle006
  • wenle006
  • 2011年11月29日 09:49
  • 46816

JQuery $.ajax 如何捕获异常信息

下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址。 type String (...
  • xwnxwn
  • xwnxwn
  • 2013年03月18日 08:25
  • 621

.NET 自定义异常

class MyException : Exception    ...{        public override string Message        ...{            g...
  • TheMoment_Rain
  • TheMoment_Rain
  • 2006年12月14日 14:29
  • 1203

自定义异常

class MyException extends Exception   //自定义的异常类 继承Exception类 { private String exceptionName; //定义一个私...
  • QQQQQQ654
  • QQQQQQ654
  • 2016年09月29日 16:28
  • 341

在springMVC+mybatis+Ajax+JSON+jQuery easyui的项目中,自定义全局异常处理器

 在springMVC+mybatis+Ajax+JSON+jQuery easyui的项目中,自定义全局异常处理器,来处理项目中的所有异常。          在项目中,对于每一个功能即cr...
  • tangliuqing
  • tangliuqing
  • 2014年07月24日 16:17
  • 1976

spring mvc 异常(runtime异常、ajax异常)统一处理与范例

SpringMVC 提供的异常处理主要有两种方式,一种是直接实现自己的HandlerExceptionResolver,另一种是使用注解的方式实现一个专门用于处理异常的Controller——Exce...
  • yaohuanjames
  • yaohuanjames
  • 2016年10月15日 20:50
  • 2061

Java 异常(Exception)&自定义异常

一Java异常体系结构 java.lang.Object ----java.lang.Throwable --------java.lang.Exception ------------jav...
  • xyajia
  • xyajia
  • 2016年09月08日 15:47
  • 1223

jQuery中Ajax事件请求状态

Ajax会触发很多事件。 有两种事件,一种是局部事件,一种是全局事件: 局部事件:通过$.ajax来调用并且分配。 $.ajax({beforeSend: function(){// H...
  • yaoyyl
  • yaoyyl
  • 2016年09月06日 22:34
  • 2657

java异常处理,ajax调用后台异常,页面跳转

function clickautohideErr(data,i){ var result = data.responseText; if(result !=null && result !=...
  • tolcf
  • tolcf
  • 2014年09月12日 14:14
  • 11145

自定义异常总结

3. 不要忽略异常   当一个 API 方法抛出 checked exception 时,它是要试图告诉你你需要采取某些行动处理它。如果它对你来说没什么意义,不要犹豫,直接转换成 uncheck...
  • aosica321
  • aosica321
  • 2016年04月14日 14:42
  • 611
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AJAX 自定义异常管理
举报原因:
原因补充:

(最多只允许输入30个字)