Javascript类ajax回调

Javascript类ajax回调,javascript,jquery,ajax,Javascript,Jquery,Ajax,Javascript var MyClass = function(){ var that = this; this.bool = false; } MyClass.prototype.ajax = function(url, callback){ $.ajax({ url: url, success: callback }); } MyClass.prototype.ajaxCall = function(){ thi

Javascript

var MyClass = function(){
    var that = this;
    this.bool = false;
}

MyClass.prototype.ajax = function(url, callback){
    $.ajax({
        url: url,
        success: callback
    });
}

MyClass.prototype.ajaxCall = function(){
    this.ajax("ajax.php", this.ajaxCallback);
}

MyClass.prototype.ajaxCallback = function(data){
    that.bool = true;
}
现在问题就在这里

that.bool = true;
我打了一个手势


错误未捕获引用错误:未定义的错误

您可以删除该错误,然后执行以下操作:

MyClass.prototype.ajaxCall = function(){
    this.ajax("", $.proxy(this.ajaxCallback, this)); //or this.ajaxCallback.bind(this)
}

MyClass.prototype.ajaxCallback = function(data){
    this.bool = true;
}


that
是在
MyClass
构造函数范围内创建的局部变量,在外部不可用。因此,访问未声明的变量会引发错误。使用或正在将上下文绑定到函数引用。因此,在jqajax调用中使用它会将上下文设置为MyClass实例的上下文,而不是jqxhr对象的上下文。

所以这是唯一的方法吗?只是觉得ajaxCallback是一个MyClass函数很愚蠢,但仍然无法访问它的变量。谢谢,我不得不接受:)嘿,我设法做了一个更简单的解决方案,因为我有许多函数使用相同的ajax函数调用。我解决问题的方法有什么问题吗?不要把JavaScript和强类型语言混淆。。。在这里,函数也是一流的对象,这意味着它们可以去任何地方,任何人都可以使用它们<代码>这个对于JavaScript来说是一个非常棘手的概念;试着读@JoniSalmi是的,你也可以。但问题可能是,如果您想对另一个绑定对象使用另一个回调,或者使用call/apply-yours将覆盖它。所以你最好在打电话的时候用它。
MyClass.prototype.ajaxCall = function(){
    var self = this;
    this.ajax("your url", function(){
       self.ajaxCallback.apply(self, arguments);
    });
}

MyClass.prototype.ajaxCallback = function(data){
    console.log(data);
    this.bool = true;
}