在Jquery get()中使用`this`回调函数

时间:2017-03-25 04:32:55

标签: javascript jquery ajax jquery-callback

我想在$ .get()的回调中使用this关键字。我的代码结构是

var myObject = {
  get: function() {
    $.get(server,data,function(data,status) {
      this.callback();
    });
  },
  callback: function() {

  }
}

我不想使用myObject.callback()。有没有办法使用this.callback()完成?

2 个答案:

答案 0 :(得分:5)

在将回复函数传递给this之前,您可以.bind() $.get()的值{/ 1}}:

var myObject = {
  get: function() {
    $.get(server, data, function(data, status) {
      this.callback();
    }.bind(this));
  }
  callback: function {
    // do something here
  }
}

当然,假设您自己的this函数中myObject.get()的值是正确的,如果您使用"点符号"为myObject.get()

另请注意,如果你的匿名函数唯一做的就是调用另一个函数,那么你可以直接绑定另一个函数:

var myObject = {
  get: function() {
    $.get(server, data, this.callback.bind(this));
  }
  callback: function {
    // do something here
  }
}

答案 1 :(得分:2)

选项#1 - 在变量(this)中缓存_this

var myObject = {
    get: function() {
        var _this = this;
        $.get(server, data, function(data, status) {
            _this.callback(); // this keyword refers to Window obj not myObject
        });
    }
    callback: function {
        // do something here
    }
}    

选项#2 - 使用jQuery的.proxy方法:

var myObject = {
    get: function() {
        $.get(server, data, $.proxy(function(data, status) {
            _this.callback(); // this keyword refers to Window obj not myObject
        }), this);

    }
    callback: function {
        // do something here
    }
}

(编辑 - 感谢nnnnnn)