我有这种ajax代码重复了很多地方。如何将其重构为单个方法,以便在成功或失败时仍然允许不同的行为。
Ext.Ajax.request({
url : 'ajax.php' ,
params : { action : 'getDate' },
method: 'GET',
success: function ( result, request ) {
Ext.MessageBox.alert('Success', 'Data return from the server: '+ result.responseText);
},
failure: function ( result, request) { Ext.MessageBox.alert('Failed', result.responseText);
}
});
答案 0 :(得分:3)
MyAjaxRequest = Ext.extend ( Ext.Ajax.request, { url : 'ajax.php' , params : { action : 'getDate' }, method: 'GET', success: function ( result, request ) { Ext.MessageBox.alert ('Success', 'Data return from the server: '+ result.responseText); }, failure: function ( result, request) { Ext.MessageBox.alert('Failed', result.responseText); } } );
通过扩展类(命名空间),你仍然能够操纵url,params,方法,成功和失败。如果没有设置 - 默认值是
答案 1 :(得分:3)
好的,这个问题有点陈旧,但可以说是一种更灵活的方法。认识到Ext.Ajax是 singleton 非常重要 - 也就是说,它已经是一个独特的预先实例化的类。 “扩展”一个单例并没有多大意义,一个单独的功能可能会在以后不必要地混淆和/或限制。
您可以添加自己的特殊Ajax请求函数,如下所示:
Ext.Ajax.dateRequest = function(myObj){
// set the pre-configured parameters here
myObj.url = 'ajax.php';
myObj.params = { action: 'getDate'};
myObj.method = 'GET';
// call the original request function with the modified config object
this.request(myObj);
};
现在您可以将重复的Ajax请求更改为:
Ext.Ajax.dateRequest({
success: yourSuccessFunction
,failure: yourFailureFunction
});
这样做的好处是,您可以轻松地将预配置的参数添加到“dateRequest”函数中,并且可以向每个Ajax请求添加附加参数(如不同的超时),而无需重写任何内容。
编辑:哎呀!我最初在下面发布了一个我认为会“克隆”Ext.Ajax的解决方案,但它仍然只是覆盖了单例。这是几年前“Saki”(Ext guru)的引用。他指的是他为常规对象/数组编写的克隆函数:
克隆函数绝不意味着克隆类或 实例化的Ext对象。这些安装几乎是不可能的 事件处理程序几乎总是如此克隆肯定会导致 不可预知的结果。
单例是“实例化的Ext对象”,因此无法轻松扩展或克隆。如果你不想直接搞乱Ext.Ajax,你可以创建一个函数(如前所述)。这是一种更灵活的形式:
function dateRequest(myObj){
myObj.url = 'ajax.php';
myObj.params = { action: 'getDate'};
myObj.method = 'GET';
return Ext.Ajax.request(myObj);
}
然后使用dateRequest({success: successFunc, failure: failFunc})
调用它。
答案 2 :(得分:2)
此代码将实现相同的结果:
function callme (callback) {
Ext.Ajax.request({
url : 'ajax.php' ,
params : { action : 'getDate' },
method: 'GET',
success: callback,
failure: function ( result, request) { Ext.MessageBox.alert('Failed', result.responseText);
}
});
}
callme(function ( result, request ) {
Ext.MessageBox.alert('Success', 'Data return from the server: '+ result.responseText);
});