在ajax成功中调用self对象失败

时间:2012-07-19 05:10:21

标签: javascript ajax

我定义了一个这样的类:

var LoadingPolecy={
    initialize:function(){
        return function(){
               this.initialize.apply(this,arguments);
        }    
    }
}
var AjaxLoadingPolecy= LoadingPolecy.initialize();
AjaxLoadingPolecy.prototype={
    initialize:function(name){
        this.name=name;
    },
    AjaxStartPolecy : function(){
        ...
    },
    AjaxStopPolecy : function(){
        ...   
    },
    SetName : function(name){
        ...
    }
}
var TempLoadingPolecy=LoadingPolecy.initialize();
TempLoadingPolecy.prototype={
    initialize:function(displayArea,source,data){
        this.loadingMsgPolecy = new AjaxLoadingPolecy();
                ...
        },
        StartLoadingTempPolecy : function(callback){
        this.loadingMsgPolecy.SetName('view');
        this.loadingMsgPolecy.AjaxStartPolecy();
        var a = $.ajax({
          ...
          success:function(html){
              callback(html);
          }
        });
    },
        EndLoadingTempPolecy : function(html){
           //Cannot call method 'AjaxStopPolecy' of undefined error
        this.loadingMsgPolecy.AjaxStopPolecy();
                ....
        }
}

我似乎对象中的对象已被更改,如何调用/使用我在初始化中定义的变量?

1 个答案:

答案 0 :(得分:1)

ajax成功回调(对于大多数其他回调都是一样的)并没有给你相同的this。但是,您可以将this的先前副本保存到另一个变量中并以这种方式访问​​它:

我不明白你要问的代码的哪一部分,但这是一个你可以适应的简单例子:

initialize:function(displayArea,source,data){
    StartLoadingTempPolecy : function(callback) {
        this.loadingMsgPolecy.SetName('view');
        this.loadingMsgPolecy.AjaxStartPolecy();
        // save copy of `this` for future use in the success handler
        var self = this;
        var a = $.ajax({
          ...
          success:function(html) {
              // you can use the variable `self` here to access the previous this ptr
              callback(html);
          }
    });
},