访问ajax成功中的类函数

时间:2016-01-06 21:10:14

标签: javascript ajax

我试图在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);

}

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

2 个答案:

答案 0 :(得分:1)

你对此的使用是有缺陷的。 '这'回调内部将使用回调的上下文,而您需要的是您的类的上下文。你可以通过缓存这个'这个来做到这一点。变量中的上下文并使用它。

@WebServlet
@WebServletContextListener
@ServletFilter
@InitParam

答案 1 :(得分:0)

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是其他选择,但我不是很熟悉,所以我会留下让其他人回答。