0

我正在尝试$.ajax Get在类的方法中执行 jquery。请求提供的数据Get将在成功的回调函数中使用,并且类也需要在同一个回调中进行修改。因此,我不得不对原始类.applythis标识符进行回调,否则回调内部将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 
        });
     };
 }
4

3 回答 3

5

context你可以在你的ajax配置中提供一个参数;所有 ajax 回调都将在该上下文中调用(即,this回调内部将引用您context$.ajax()调用中传递的值):

SomeClass.prototype.methodName = function() {
    $.ajax({
        ....
        context: this    // callbacks will be called with the same context that methodName() is running in
        ....
    });
}
于 2012-05-28T21:26:00.587 回答
1

你想要.bind(this),没有.apply(this)bind更改this函数的指针,而apply实际上在新上下文中运行该函数。

于 2012-05-28T21:29:06.937 回答
1

我想你的意思bind不是applybind创建一个新函数,在设置时调用包装的函数thisapply运行后立即调用该函数addme()

然而bind,这是 ECMAScript 第五版功能,因此您需要执行以下操作之一:

  1. 旧浏览器的polyfill bind
  2. 使用 jQuery 等价物proxy
  3. 使用显式设置的context参数 to ;ajaxthis
  4. 记住并在内部函数中var that= this;使用addme封闭的引用。that
于 2012-05-28T21:30:42.327 回答