的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:未定义
答案 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
构造函数范围内创建的局部变量,在外部不可用。因此,访问未声明的变量会引发错误。使用$.proxy或function.prototype.bind将上下文绑定到函数引用。因此,在jq ajax调用中使用它会将上下文设置为MyClass实例的上下文而不是jqxhr对象。