setTimeout一直在触发,如何让它只触发一次?

时间:2013-07-18 10:51:12

标签: javascript jquery

我正在进行一个简单的聊天,它可以在不同的浏览器中运行,但是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);
        }
    });
}

2 个答案:

答案 0 :(得分: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;
        }
    });
}

答案 1 :(得分: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);
        }
    });
}