首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >setInterval中的Javascript setTimeout

setInterval中的Javascript setTimeout
EN

Stack Overflow用户
提问于 2013-07-14 07:16:56
回答 2查看 2.1K关注 0票数 1

我这里有个问题..我使用setInterval函数将页面加载到div中,每30秒加载一次。好吧..。在该页面中,我有另一个setInterval函数,它由每秒更改一个数字倒计时组成。问题是,一次倒计时会跳过3秒,即使它必须在1秒内回调。就像: 01:24 -> 01:21 -> 01->19...

下面是我的第一个setinterval的代码:

代码语言:javascript
运行
AI代码解释
复制
<script>
    var t;
    t=setInterval(function(){
        $.get('<?=return_url("php/home_new.php");?>', { k: "1" } ).done(function(data){
            if(data)$("#ex_start_test").html(data);});
        },
        30000
    );
</script>

以及倒计时的代码:

代码语言:javascript
运行
AI代码解释
复制
<?
$query=q_return("SELECT nume, cod, data, MINUTE(data_start) as minute, data_start FROM chestionare WHERE data_start>date_sub(now(), interval 2 minute)");?>

<script>
    var timp_c="<?=$query['minute'];?>";
    var sec;
    var min;
    $.get('<?=return_url("php/getimp.php");?>', { k: "sec" } ).done(function(data){sec=data;});
    $.get('<?=return_url("php/getimp.php");?>', { k: "min" } ).done(function(data){min=data;});

    setTimeout(refresh, 1000);

    function refresh(){
        if(sec>=1){
            sec=sec-1; 
        }else{
            min=min-1;
            sec=59;
        }

        if(sec<10){
            $("span#ex_start_timp_ramas_sec").each(function(){
                $(this).html("0"+sec);
            });
        }else{
            $("span#ex_start_timp_ramas_sec").each(function(){
                $(this).html(sec);
            });
        }
               $("span#ex_start_timp_ramas_min").each(function(){
            $(this).html(min);
        });

        if(sec==0 && min==0){
            //$("#ex_click_final").trigger('click');
            clearInterval(t);
            $("#ex_new_test").hide();
        }

        setTimeout(refresh, 1000);
    } 
</script>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-14 07:33:21

我猜您的问题在于,每次使用setInterval重新加载页面时,您都会产生另一个setTimeout链,而没有清除前一个链。

尝试保存timeoutId并将其清除,将其作为倒计时代码的第一件事。像这样的东西应该是有效的:

代码语言:javascript
运行
AI代码解释
复制
<?
$query=q_return("SELECT nume, cod, data, MINUTE(data_start) as minute, data_start FROM chestionare WHERE data_start>date_sub(now(), interval 2 minute)");?>

<script>
var timp_c="<?=$query['minute'];?>";
     var sec,
         min,
         timeoutId;
     $.get('<?=return_url("php/getimp.php");?>', { k: "sec" } ).done(function(data){sec=data;});
     $.get('<?=return_url("php/getimp.php");?>', { k: "min" } ).done(function(data){min=data;});

     if (timeoutId) {
         clearTimout(timeoutId);
     }

     timeoutId = setTimeout(refresh, 1000);

     function refresh(){
         if(sec>=1){
             sec=sec-1; 
         }else{
             min=min-1;
             sec=59;
         }

         if(sec<10){
             $("span#ex_start_timp_ramas_sec").each(function(){
                 $(this).html("0"+sec);
             });
         }else{
             $("span#ex_start_timp_ramas_sec").each(function(){
                 $(this).html(sec);
             });
         }

         $("span#ex_start_timp_ramas_min").each(function(){
             $(this).html(min);
         });

         if(sec==0 && min==0){
             //$("#ex_click_final").trigger('click');
             clearInterval(t);
             $("#ex_new_test").hide();
         }

         timeoutId = setTimeout(refresh, 1000);
    }
</script>
票数 0
EN

Stack Overflow用户

发布于 2013-07-14 08:00:18

我认为这里的问题是,您发出了两个Ajax请求,然后您希望启动计时器,但这些请求需要时间来执行,因为它们是异步的,这可以解释您看到的结果。

$.when()拯救了我们:

代码语言:javascript
运行
AI代码解释
复制
var $getsec = $.get('<?=return_url("php/getimp.php");?>', { k: "sec" } ),
$getmin = $.get('<?=return_url("php/getimp.php");?>', { k: "min" } );

$.when($getsec, $getmin).done(function($sec, $min) {
    min = $min[0]; // [0] = data
    sec = $sec[0];
    // start refresh
    setTimeout(refresh, 1000);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17637371

复制
相关文章
js中settimeout和setInterval区别_JavaScript set
注:调用过程中,可以使用clearTimeout(id_of_settimeout)终止
全栈程序员站长
2022/11/09
1.9K0
JavaScript 定时器 setTimeout、setInterval
定时器在javascript中的作用 1、制作动画 2、异步操作 3、函数缓冲与节流 定时器类型及语法 示例代码如下: /* 定时器: setTimeout 只执行一次的定时器 clearTimeout 关闭只执行一次的定时器 setInterval 反复执行的定时器 clearInterval 关闭反复执行的定时器 */ var time1 = setTimeout(myalert,2000); var time2 = setInterval(
Devops海洋的渔夫
2019/05/30
9860
JavaScript如何用setTimeout模拟setInterval
思路就是递归调用 function myInterval(fun,time){ function inside(){ fun(); setTimeout(inside,time); } setTimeout(inside,time); } myInterval(fn,1000); function fn(){ console.log('嘿嘿'); }
henu_Newxc03
2022/05/05
9440
javascript中的setTimeout() 方法和clearInterval() 方法和setInterval() 方法
语法 setTimeout(code,millisec) 参数 描述 code 必需。要调用的函数后要执行的 JavaScript 代码串。 millisec 必需。在执行代码前需等待的毫秒数。 提示和注释 提示:setTimeout() 只执行 code 一次。 <html> <head> <script type="text/javascript"> function timedMsg() { var t=setTimeout("alert('5 seconds!')",5000) } </scrip
用户7657330
2020/08/14
1.3K0
setTimeout和setInterval
setTimeout(methodName, interval); //间隔时间单位为毫秒,表示interval毫秒后执行方法methodName
tandaxia
2018/09/27
2K0
setTimeout和setInterval
新建 html 文件 21-setTimeout.html ,编写下方程序,运行看看效果吧
鹤川
2023/03/21
1.1K0
javascript当中时间控制setTimeout和setInterval的用法
9.时间控制setTimeout和setInterval 马克-to-win:下个例子说明每秒刷新时间如何实现。(利用setTimeout方法): setTimeout和setInterval的区别是:setTimeout只执行1次,而setInterval可以无限执行。 例 1.9.1(setTimeoutIEFF.html) <HTML> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <SCRIPT LANGUAGE="JavaScript"> <!-- function time() { var now = new Date(); var y = now.getFullYear(); var m = now.getMonth()+1; var d = now.getDate(); var x = now.getDay(); var hour = now.getHours(); var day =new Array("日","一","二","三","四","五","六"); var xingqi = day[x]; var mi =now.getMinutes(); var s = now.getSeconds(); var t =document.getElementById("t"); t.innerHTML="今天是"+y+"年"+m+"月"+d+"日"+"星期"+xingqi+","+hour+":"+mi+":"+s; setTimeout("time()",1000); } //--> </SCRIPT> </HEAD> <BODY οnlοad="time()"> <div id="t"></div> </BODY> </HTML> setInterval&clearInterval
马克java社区
2021/01/18
6460
javascript当中时间控制setTimeout和setInterval的用法
JavaScript定时调用函数(SetInterval与setTimeout)
setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。
aehyok
2018/09/11
1.5K0
setInterval 和 setTimeout 用法
setInterval 定时器,开始执行后,每间隔指定时间执行一次,除非清除定时器 用法: setInterval(function(){ 方法… },1000);// 间隔时间 setTimeout 是在指定的时间后,执行该事件 用法: setTimeout(function(){ 方法…. },1000); clearInterval(); // 清除定时器 <html> <head> <title>js</title> </head> <body> <script> test();
IT架构圈
2018/06/01
1K0
使用setTimeout模拟setInterval
相信setInterval这个东西大火都比较熟了,这里不做关于它的介绍,而是关于本文是如何实现这一功能。
kifuan
2022/10/24
1.8K0
利用setTimeout和SetInterval构建Javascript计时器
看到了一篇深入浅出的讲解setTimeout和setInterval的例子,直接讲英文贴出来吧,也不是很难。
大江小浪
2018/07/24
8080
深度解密setTimeout和setInterval——为setInterval正名!
重复定时器,JS有一个方法叫做setInterval专门为此而生,但是大家diss他的理由很多,比如跳帧,比如容易内存泄漏,是个没人爱的孩子。而且setTimeout完全可以通过自身迭代实现重复定时的效果,因此setIntervval更加无人问津,而且对他退避三舍,感觉用setInterval就很low。But!setInverval真的不如setTimeout吗?请大家跟着笔者一起来一步步探索吧!
小美娜娜
2019/04/04
4K0
深度解密setTimeout和setInterval——为setInterval正名!
Vue中 使用定时器 (setInterval、setTimeout)[通俗易懂]
js中定时器有两种,一个是循环执行 setInterval,另一个是定时执行 setTimeout。
全栈程序员站长
2022/11/10
7.7K0
Vue中 使用定时器 (setInterval、setTimeout)[通俗易懂]
setTimeout实现setInterval和clearInterval[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
4990
为什么要用 setTimeout 模拟 setInterval ?
在[JS 事件循环之宏任务和微任务](../Performance/JS事件循环之宏任务和微任务.html)中讲到过,setInterval 是一个宏任务。
九旬
2021/01/06
1.2K0
js中settimeout和setinterval的区别是什么?
javascript的setTimeOut和setInterval函数应用非常广泛,在网站中经常用来处理延时延时和定时任务,比如打开网页一段时间后弹出一个登录框,页面每隔一段时间发送异步请求获取最新数据等等。但它们的应用是有区别的。
跟着阿笨一起玩NET
2020/09/16
1.5K0
js中的this关键字,setTimeout(),setInterval()的执行过程
var test1 = { name: 'windseek1', showname: function () { console.log(this.name); } } var test2 = { name:'windseek2', showname: test1.showname } test2.showname() 运算结果是windseek2,由于test2.showname=test1.showname所以test2.showname()=test1.showname(); test2.shown
windseek
2018/06/14
1.3K0
为什么要用 setTimeout 模拟 setInterval ?
来源:九旬 https://segmentfault.com/a/1190000038829248
@超人
2021/02/26
1.2K0
为什么要用 setTimeout 模拟 setInterval ?
第46天:setInterval与setTimeout的区别
js的setTimeout方法用处比较多,通常用在页面刷新了、延迟执行了等等。今天对js的setTimeout方法做一个系统地总结。
半指温柔乐
2018/09/11
1.3K0
点击加载更多

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文