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); }
記得在不須要的頁面若是有定時器任務必定要先關閉定時器任務,尤爲是從定時任務的頁面跳轉到其餘頁面時,若是沒有及時關閉有可能會多餘的請求網絡開銷,瀏覽器頁面打開緩慢,容易使得瀏覽器崩潰,我開發的時候就出現過這個狀況。寫這篇博客也是給本身一個提醒吧。