Javascript类ajax回调这个

时间:2013-12-28 02:15:38

标签: 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(){
    this.ajax("ajax.php", this.ajaxCallback);
}

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

现在问题在这里

that.bool = true;

我做了一个jsfiddle。 http://jsfiddle.net/J3P8t/

错误未捕获的ReferenceError:未定义

1 个答案:

答案 0 :(得分:1)

您可以摆脱that并执行:

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

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

或者

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;
}

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