Ext开发的异常处理

Ext开发的异常处理

 

 使用Ext开发时,需要将后台出现的异常信息包装后显示给用户,这里面分为2种情况:

1. 使用Ext.Ajax.request()方式,这种可以在 failure里对返回的JSON数据做处理,很简单;

2. 对于 grid和树,返回JSON数无法接受到,只能采用对loadexception时间做监听来处理,这要求在Action里

    将异常抛出到前台。

    这里给出处理方式:

     我们写一个全局的exception.js,在里面写:

 

//统一的对loadexception的错误处理,主要针对grid
if(Ext.data.Store){
 var _constructorFn=Ext.data.Store.prototype.constructor;
 Ext.data.Store.prottype.constructor=function(A){
  _constructorFn.call(this,A);
  if(!this.hasListener('loadexception')){
   this.on('loadexception',showExtLoadException);
  }
 }
}

 

//统一的对loadexception的错误处理,主要针对tree
if(Ext.tree.TreeLoader){
 var _constructorL=Ext.tree.TreeLoader.prototype.constructor;
 Ext.tree.TreeLoader.prototype.constructor=function(A){
  _constructorL.call(this,A);
  if(!this.hasListener('loadexception')){
   this.on('loadexception',showExtLoadException);
  }
 }
}

 

//对应的处理函数

 

var debug = false;

function showExtLoadException(This, options, response, error) {

 if (debug) {
  if (error) {
   top.Ext.Msg.alert("错误", "解析数据时发生错误:" + error.message);
   return;
  }
 }

 var status = response.status;
 var text = response.responseText;

 switch (status) {
  case 404 :
   top.Ext.MessageBox.alert("错误", "加载数据时发生错误:请求url不可用");
   break;
  case 200 :
   if (text.length > 0) {
    var data = Ext.decode(text);
    if (data && data.error) {
     top.Ext.MessageBox.alert("错误", "加载数据时发生错误:<br/>"
         + data.error);
    } else {
     top.Ext.MessageBox.alert("错误", "加载数据时发生错误:<br/>" + text);
    }
   }
   break;
  case 0 :
   top.Ext.MessageBox.alert("错误", "加载数据时发生错误:<br/>" + "远程服务器无响应");
   break;
  default :
   var data = Ext.decode(text);
   if (data && data.error) {
    top.Ext.MessageBox.alert("错误", "加载数据时发生错误<br/>错误码:" + status
        + "<br/>错误信息:" + data.error);
   } else {
    top.Ext.MessageBox.alert("错误", "加载数据时发生错误<br/>错误码:" + status
        + "<br/>错误信息:" + text);
   }

   break;
 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值