js的定时器有两种web
setInterval(code,millisec[,"lang"]) :按照指定的周期(以毫秒计)来调用函数或计算表达式。方法会不停地调用函数,直到clearInterval() 函数被调用或窗口被关闭,由 setInterval() 返回的 ID 值可用做 clearInterval() 方法的参数。ajax
setTimeout(code,millisec) :在指定的毫秒数后调用函数或计算表达式。浏览器
setTimeout(表达式,延时时间)在执行时,是在载入后延迟指定时间后,去执行一次表达式,记住,次数是一次
setInterval(表达式,交互时间)则不同,它从载入后,每隔指定的时间就执行一次表达式 。websocket
window.clearInterval(timer1)和window.clearTimeout(time1);两种清除方式均可以清除经过setTimeout和setInterval设置的定时器(两种方式在设置定时器的时候有区别,清除定时器的时候没有区别),而且参数不只能够是timer,还能够是其返回值,须要注意的是,定时器即便清除了,其返回值也不会清除,以后设置的定时器的返回值也会在其返回值的基础上继续向后排;网络
(1)、写计时器,好比倒计时状况session
(2)、轮询检测网络或者登录状态socket
(3)、轮询定时刷新页面局部数据jsp
...函数
下面的例子是轮询检测网络状态信息用到了setInterval,setTimeout两个定时器post
//轮询判断是否网络断开 checkNet();
/** * 轮询,判断是否联网 */ function checkNet(){ setInterval(function(){ $.ajax({ url: getContextPath()+"/login/checknet", type:"post", timeout: 5 * 1000, success:function(result){ console.log("轮询链接成功"); }, complete: function (XMLHttpRequest,status) { if(status == 'timeout') { console.log("complete网络断开!"); var xmlhttp = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp"); xmlhttp.abort(); OffTheNet(); } } }); }, 5 * 1000); } /** * 断网处理方案:从新登录 */ function OffTheNet(outTime){ websocket.close(); var _time = 4000; if(outTime != null && typeof(outTime) != "undefined"){ _time = outTime; } layer.msg("网络断开,请从新登录!",{ icon: 0, time: _time }); setTimeout(function(){ sessionStorage.setItem("OFFTHENET",true); location.href = getRootPath()+"/jsps/login/login.jsp"; },_time); }
记得在不须要的页面若是有定时器任务必定要先关闭定时器任务,尤为是从定时任务的页面跳转到其余页面时,若是没有及时关闭有可能会多余的请求网络开销,浏览器页面打开缓慢,容易使得浏览器崩溃,我开发的时候就出现过这个状况。写这篇博客也是给本身一个提醒吧。