0

我有这个对象(这只是它的一部分,显然......):

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)
            }
        })
    };
}

我像这样从数据库创建它的实例:

$.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 是完全正确的。但是,日志 #2 已经存在问题,因为它只给了我数据库中的最后一个空间(或在循环中......),当然,在超时后日志 #1 也变得错误。

这是怎么回事?我真的只是 javascript 的初学者,所以......


tGet功能:

$.tGet = function(action, data, callback, error) { 
    $.get('php/ajax.php?action='+action, data, callback, 'json').fail(error); 
} 
4

2 回答 2

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)
        }
    })
};
于 2013-04-03T18:03:02.627 回答
-1

看起来您正在创建具有相同房间 id 的多个房间实例。如果创建行读取n.create(edata[i].room_id)

于 2013-04-03T15:42:09.797 回答