ajax内部访问类功能成功

access class function inside ajax success

本文关键字:功能 成功 访问 内部 ajax      更新时间:2023-09-26

im试图在ajax成功回调中分配一个变量。我知道,为了分配值,我需要使用回调函数。但是我希望这个函数在类中。有可能实现这样的东西吗?

function callMgmt_class() {
        this.room_id                = 'Error';
        this.assignRoomVar = function(room_id) {
            alert();
            this.room_id = room_id;
        }
        this.getRoomID = function() {
            $.ajax({
                url: "/get_room_id.php",
                dataType: "json",
                success: function(data) {
                    this.assignRoomVar(data.room_id);
                }
            })
        }
    }

有什么方法可以使用bind吗?我试过了:

success: function(data) {
    (function() { this.assignRoomVar(data.room_id); }).bind(this);
}

所以我没有得到任何错误,但函数似乎没有被调用。

您对它的使用是有缺陷的。'回调中的this将使用回调的上下文,而您需要的是类的上下文。您可以通过将"this"上下文缓存在变量中并使用它来实现这一点。

this.getRoomID = function() {
        var me = this;
        $.ajax({
            url: "/get_room_id.php",
            dataType: "json",
            success: function(data) {
                me.assignRoomVar(data.room_id);
            }
        })
    }

this不是您要查找的this

this关键字很棘手,根据上下文的不同,会有不同的引用。当您在ajax成功函数中访问this时,它不再引用callMgmt_class对象(我认为它将引用ajax函数)。

解决这一问题的最佳方法是,当您确定this的值时,将其分配给另一个变量。因此,在你的功能开始时,是最好的选择

this.getRoomID = function() {
    var that= this;
    //Now use that instead of this when you want to refer to the callMgmt_class object
    $.ajax({
      url: "/get_room_id.php",
      dataType: "json",
      success: function(data) {
      that.assignRoomVar(data.room_id);
    }
  })
}

添加

我认为使用bindapply是其他选择,但我不是很熟悉,所以我将把它留给其他人来回答。