Extjs ajax代码重构

时间:2011-01-30 23:45:00

标签: javascript refactoring extjs

我有这种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); 
    } 
});

3 个答案:

答案 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); 
});