如何在jQuery ajax成功句柄中使用关键字'this'

时间:2011-11-29 16:58:26

标签: javascript jquery

我有一个这样的课程:

var MyClass = function(){  
    this.field = 'field';  
}  
MyClass.prototype.doSth(data){  
    //doSth with data and this.field;   
}  
MyClass.prototype.getData(){  
    $.ajax({  
        type: "post",  
        url: 'myurl',  
    }).success(this.doSth);  
}

但是在doSth中,所有'this'指向jquery ajax对象而不是MyClass实例。

我添加了静态归档_self以指向MyClass自我MyClass._self = this;,然后将doSth中的所有this更改为MyClass._self即可修复。但我认为这很难看。

我想知道有没有办法通过修改doSth body来解决我的问题?

2 个答案:

答案 0 :(得分:3)

您可以使用要在回调中使用的context参数传递对象。

$.ajax({  
    type: "post",  
    url: 'myurl',
    context: this
}).success(function(d){
  this.doSth(d);
});  

答案 1 :(得分:0)

我认为你的意思是:

MyClass.prototype.getData = function(){  
    var self = this;
    $.ajax({  
        type: "post",  
        url: 'myurl',  
    }).success(function(){
        self.doSth();
    });  
};

“getData”的定义需要一个如此处所示的函数 - 你的版本没有多大意义。

或者您甚至可以使用jQuery.proxy(请参阅http://api.jquery.com/jQuery.proxy/

MyClass.prototype.getData = function(){  
    $.ajax({  
        type: "post",  
        url: 'myurl',  
    }).success( $.proxy(this.doSth, this) );  
};

$。proxy创建一个包装函数,它将在给定对象的上下文中调用封闭的函数。