在使用Extjs的表单控件Ext.form.Panel做文件上传时,发现success方法的回调必须依赖服务端返回,其基本结构是:{success:true}。
原先做好的上传程序为了满足界面控件的需要而去做变动,这种设计我认为是不够合理的。
如何不依赖服务端的Json返回,我的解决方案是:重写Ext.form.Action.Submit的handleResponse,控制返回对象的success属性。
Ext.override(Ext.form.Action.Submit, {
//保存原先的处理原型
handleResponseV1: Ext.form.Action.Submit.prototype.handleResponse,
//重写原有处理方式
handleResponse: function (response) {
try {
var base = this.handleResponseV1(response);
base.success = true;
return base;
}
catch (ex) { }
return { success: false };
}
});
//调用示例:调用方式不受影响
new Ext.form.Panel({
url: 'upload.ashx',
items:
[
new Ext.form.field.File({
listeners: {
change: function () {
var frm = this.up("form");
frm.submit({
success: function (form, action) {
//得到json对象
var jsonData = Ext.decode(action.response.responseText);
alert('上传成功');
}
, failure: function (form, action) {
debugger;
alert('上传失败');
}
})
}
}
})
]
}).render(Ext.getBody());