为什么用SetTimeOut运行时间总是9秒一次

zy35147972122 2012-05-04 03:57:58

function SetFun() {
setTimeout('LoadTopWorkList2()', 5000);
}
function LoadTopWorkList2() {
document.getElementById("btnSearch").click();
setTimeout('LoadTopWorkList2()', 200000);
}

</script>
</head>
<body onload="SetFun()">
...全文
177 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zy35147972122 2012-05-04
  • 打赏
  • 举报
回复
明白是为什么了 因为我调用服端的按钮时间后,页面刷新了,<body>的Onload事件重新执行,我onload事件中只是设定了5秒,所以加上链接服务器的数据库时间就变成了9秒左右了
zy35147972122 2012-05-04
  • 打赏
  • 举报
回复
如果SettimeOut每200秒运行一次的话,后台的事件也应该隔200秒运行一次啊
zy35147972122 2012-05-04
  • 打赏
  • 举报
回复
但是不应该啊,我后台的方法就是一个获取当前时间,并插入到数据库中。确实如果我不调用后台的方法的话,只调用前台的JS方法,运行正常
乌镇程序员 2012-05-04
  • 打赏
  • 举报
回复
搞不懂你为什么要写得这么复杂,利用setInterval()函数可以把你要做的事情精简为一行:
window.onload = function() {
setInterval('document.getElementById("btnSearch").click();', 200000);
}
长恨无绝 2012-05-04
  • 打赏
  • 举报
回复
function SetFun() {
setTimeout('LoadTopWorkList2()', 5000);
}
function LoadTopWorkList2() {
var btnSearch=document.getElementById("btnSearch");
if(btnSearch.working)
clearTimeOut(btnSearch.working);
btnSearch.click();
btnSearch.working=setTimeout('LoadTopWorkList2()', 200000);
}
三石-gary 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

就是啊,我是设定了200秒,但是在后台的事件中往数据库写数据的时候可以看到只相隔9秒就运行一次
[/Quote]
那就是你后台的问题了。。应该和setTimeout没有关系
乌镇程序员 2012-05-04
  • 打赏
  • 举报
回复
应该不是setTimeout()引起的,我照着你的代码写了一个,是按预期运行的。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
function f1() {
setTimeout('f2()', 5000);
}
function f2() {
document.getElementById('demo').innerHTML = 0;
setTimeout('f2()', 10000);
}
window.onload = function() {
setInterval('var demo = document.getElementById("demo"); demo.innerHTML = parseInt(demo.innerHTML) + 1;', 1000);
f1();
}
</script>
</head>

<body>
<span id="demo">0</span>
</body>
</html>
zy35147972122 2012-05-04
  • 打赏
  • 举报
回复
就是啊,我是设定了200秒,但是在后台的事件中往数据库写数据的时候可以看到只相隔9秒就运行一次
三石-gary 2012-05-04
  • 打赏
  • 举报
回复
没看懂你的问题。。你上面已经设定了时间了啊。。怎么能9秒了。。
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在Vue.js项目开发中,为了达到数据实时更新的效果,开发者常常需要借助定时任务来周期性地刷新数据接口。而要掌握如何在Vue项目里每30刷新一次接口,首先得了解定时器在JavaScript里的运行机制。JavaScript里常用的定时器函数有setInterval和setTimeout。setInterval的功能是依据设定的周期(单位是毫)来反复执行某个函数,像setInterval(func, milliseconds)这样用,它会一直循环调用func,直到用clearInterval来停止它。不过,setInterval存在一个比较常见的问题,那就是当func函数里有异步操作时,定时器不会停下,这就会使得定时器任务不断累积,进而可能引发页面性能下降,甚至出现卡死的情况。而setTimeout则是让某个函数在延迟特定时间后执行一次,它不会像setInterval那样出现任务叠加的情况,因为每次执行完函数后它不会自动再次设置定时器。对于Vue项目中每30刷新接口的需求,虽然从表面上看setInterval似乎更适合,但直接用它存在页面卡死的风险。正确的做法是将setInterval和setTimeout结合起来使用,具体方式如下:javascriptwindow.setInterval(() => { setTimeout(fun, 0);}, 30000);这里,window.setInterval设置了一个每30触发一次的定时器,而在定时器里不是直接运行接口刷新函数,而是通过setTimeout来执行fun函数。setTimeout(fun, 0)表示尽可能快地执行fun函数,但不会立刻执行,而是等当前执行栈空闲了才执行,这样就能避免定时器任务叠加的问题。需注意,setI

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧