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;
}
}