我有这个对象(这只是它的一部分,很明显......):
function room() {
this.data = {
sender_name: '',
room_id: 0
}
this.create = function (sender_name) {
// (code to set this.data)
this.removeTimer();
}
this.removeTimer = function() {
var t = this;
console.log(t.data.sender_name) // log #1
$.tGet('roomInfo', {'room_id': this.data.room_id}, function(edata) {
console.log(t.data.sender_name) // log #2
if(edata.exists == 'false') {
// remove room code...
}
else {
setTimeout(function() {
t.removeTimer();
}, 1000)
}
})
};
}
我从DB创建它的实例:
$.tGet('getRooms', {'user_id': mUser}, function(edata) {
var i = 0, n;
for(i = 0; i<edata.length; i++) {
n = new room();
n.create(edata[i].sender_name);
}
})
现在,问题是控制台打印的只是最后创建的房间。我不知道发生了什么......
第一次运行此代码时,日志#1完全正确。但是,log#2已经存在问题,因为它只给我DB中的最后一个空间(或循环...),当然,在超时日志#1也出错之后。
发生了什么事?我真的只是javascript的初学者,所以......
tGet
功能:
$.tGet = function(action, data, callback, error) {
$.get('php/ajax.php?action='+action, data, callback, 'json').fail(error);
}
答案 0 :(得分:0)
this.removeTimer = function() {
console.log(this.data.sender_name) // log #1
$.tGet('roomInfo', {
'room_id': this.data.room_id,
'instance' : this
}, function(edata) {
console.log(this.instance.data.sender_name) // log #2
if(edata.exists == 'false') {
// remove room code...
}
else {
setTimeout(function() {
instance.removeTimer();
}, 1000)
}
})
};
答案 1 :(得分:-1)
看起来您正在使用相同的房间ID创建多个房间实例。创建行应该是n.create(edata[i].room_id)