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

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

最佳答案

我想你想要这样的东西:

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

关于javascript - setTimeout一直触发,如何让它只触发一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17721430/

相关文章:

jquery - Ajax post 从 Django 返回 CSRF 错误

javascript - 使用 AJAX 提交表单 PHP JQuery 将我带到操作页面

javascript - 创建一个数组,其中每个数组都有自己的值

javascript - 想从容器中复制 url 然后将其用作 bg 但我不能

javascript - 如何在 Visual Studio 2010/2012 中将自定义文件扩展名注册到 JavaScript 编辑器?

javascript - ID anchor 滚动得有点远

jquery - 'touchend' 在滚动屏幕时触发

javascript - Codeigniter 中自动完成多个值

ASP.NET MVC下的JQuery菜单插件似乎只能在Chrome中工作,但不能在IE和FireFox中工作

javascript - 重复交通灯序列