我正在尝试在类的方法中执行jquery $.ajax
Get
。由成功回调函数中使用的Get
请求提供的数据以及类需要在同一回调中修改。所以,我必须.apply
对原始类的 this
标识符进行回调,否则,在回调中, this
在当地被取代。但是,在将回调应用于 this
时,Get
返回的数据将显示为undefined
。我该如何解决这个问题。任何帮助表示赞赏。
var tableblock = function(tablename){
this.tablename = tablename;
this.numusers = 0;
this.userpool = new Array();
this.addme = function(){
bodyContent = $.ajax({
type: "GET",
url: "controllers/bestpals.php",
data: "addpal=1&palname="+userid+"&nocache="+Math.floor((Math.random()*100)+1),
error: function(xhr, statusText){alert('could not add pal. refresh page.');},
success: function(msg){
alert(msg); // this will give undefined when .apply(this)
myid = msg;
syncpals(this,true);
}.apply(this) // using this alert(msg) above gives undefined
});
};
}
答案 0 :(得分:5)
您可以在ajax配置中提供context
参数;将在该上下文中调用所有ajax回调(即,回调中的this
将引用您在context
调用中作为$.ajax()
传递的值:
SomeClass.prototype.methodName = function() {
$.ajax({
....
context: this // callbacks will be called with the same context that methodName() is running in
....
});
}
答案 1 :(得分:1)
您需要.bind(this)
,而不是.apply(this)
。 bind
更改函数的this
指针,而apply
实际上在新上下文中运行函数。
答案 2 :(得分:1)