我试图在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);
}
所以我没有得到任何错误,但似乎没有调用该函数。
答案 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);
}
})
}
加成:
我认为使用bind
或apply
是其他选择,但我不是很熟悉,所以我会留下让其他人回答。