Javascript类ajax回调
JavascriptJavascript类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
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;
}