2

我正在做一个简单的聊天,它可以在不同的浏览器中运行,但setTimeout会一直触发,我希望它只触发一次,因为继续触发毫无意义,而且我相信它也会给服务器造成更大的压力。

这是从其他地方调用的函数:

function chat_load() {
    $.post('chat.php', {stage:'load'}, function(data) {
        $('#window').html(data);
        setTimeout("chat_load();", 1000);

    });
}

我尝试了以下类似的方法,但它一直在开火。此外,该功能应该仅在单击某个按钮时触发,这种情况每隔一段时间才会发生一次。

var c = 0;
function chat_load() {
    $.post('chat.php', {stage:'load'}, function(data) {
        $('#window').html(data);
        var t = setTimeout("chat_load();", 1000);
        c++;
        if (c == 3) {
            clearTimeout(t);
        }
    });
}
4

2 回答 2

2

我想你想要这样的东西:

var c = 0, t;
function chat_load() {
    $.post('chat.php', {stage:'load'}, function(data) {
        $('#window').html(data);
        clearTimeout(t);
        t = setTimeout(chat_load, 1000);            
        if (++c === 3) {
            clearTimeout(t);
            c=0;
        }
    });
}
于 2013-07-18T10:55:10.467 回答
0

您不能更改异步函数中的变量

c++;不会工作

也许你应该这样做

function addCount() {
   c++;
}

并更改c++addCount();

所以这

var c = 0;

function addCount() {
   c++;
}

function chat_load() {
    $.post('chat.php', {stage:'load'}, function(data) {
        $('#window').html(data);
        var t = setTimeout("chat_load();", 1000);
        addCount();
        if (c == 3) {
            clearTimeout(t);
        }
    });
}
于 2013-07-18T10:54:13.197 回答