鍍金池/ 問答/HTML5  HTML/ js定時每天某個時間,執(zhí)行異步方法

js定時每天某個時間,執(zhí)行異步方法

1.頁面客戶長期打開,需要在每天某個時間進行定時刷新數(shù)據(jù)(執(zhí)行異步方法)。
2.

function getProductFileList() {
    $.ajax({
        url: MMBS_IP + '/resources/rest/climate/alarm/getProductFileList',
        type: 'get',
        async: true,
        beforeSend: ajaxLoading,
        success: function(data) {
            if(data.length > 0) {
                var strHtml = "";
                for(var i = 0; i < data.length; i++) {
                    var detail = JSON.stringify(data[i]);
                    strHtml += "<div id='" + i + "' onclick='fileView(" + detail + ")'>";
                    strHtml += data[i].name;
                    strHtml += "</div>";
                }
                $("#product-scroll").html(strHtml);
            } else {
                $.messager.alert('溫馨提示', '此條件下無數(shù)據(jù)!', 'info');
            }
        },
        /*error: function(xhr, textStatus) {
            $.messager.alert('溫馨提示', '訪問出錯!', 'info');
        },*/
        complete: ajaxLoadEnd
    });
    meter1=setTimeout("getProductFileList()", 20000);
    console.log("getProductFileList()"+meter1)
}

通過此方法可以沒20秒刷新一次,但是無法做到每天某個時間定時刷新。

回答
編輯回答
編輯回答
別瞎鬧

為啥要自動刷頁面。。這種需求明顯是要websocket 啊。你這樣刷,沒幾天,哦不。沒幾個小時瀏覽器就卡死崩潰了

2018年7月14日 09:52
編輯回答
命多硬

其實這個不是太麻煩,你既然有了定時器,只是在循環(huán)定時器中添加一個檢查條件,到了某個規(guī)定的時刻就執(zhí)行而已。
需要注意的是,到底這個時刻是以服務(wù)器時間為準(zhǔn)還是客戶時間為準(zhǔn),如果以服務(wù)器時間,則服務(wù)器需要用一定的機制把時間信息發(fā)布給客戶端,如果以客戶端的為準(zhǔn),則可以利用date、time相關(guān)api。

2017年7月30日 01:34
編輯回答
傲寒

提供一種思路吧,不使用第三方的庫,主要還是使用setTimeout:

假設(shè)需求是每天8點刷新。

定義一個A方法,目的是獲取當(dāng)前時間,制定一些策略:

當(dāng)A獲取到的時間小于7點時,一小時后再執(zhí)行A;當(dāng)大于7點小于8點時,每1分鐘執(zhí)行一次A,直到當(dāng)前獲取到時間為8點,執(zhí)行g(shù)etProductFileList函數(shù);當(dāng)時間大于8點時,恢復(fù)每一小時執(zhí)行一次A的頻率。

當(dāng)然,這個策略還可以進行優(yōu)化的,目的是為了盡可能減少setTimeout的次數(shù)但是又可以盡可能的在8點整執(zhí)行g(shù)etProductFileList。

A方法在客戶打開頁面時執(zhí)行一次。

2017年2月12日 04:54
編輯回答
笨笨噠

謝邀,延伸下2樓的思路,直接定位即可。初次進入的時候,計算當(dāng)前時間和目標(biāo)時間的距離,執(zhí)行一次setTimeout(func,距離時間),第二次開始,把setTimeOut的時候設(shè)置成24小時。代碼

/* 
  入?yún)⑹悄繕?biāo)時間的小時數(shù),取值0-23,當(dāng)然可以根據(jù)需要拓展成分鐘數(shù),這里主要是提供思路所以從簡
 */
function setRegular(targetHour){
  var timeInterval,nowTime,nowSeconds,targetSeconds 

  nowTime = new Date()
  // 計算當(dāng)前時間的秒數(shù)
  nowSeconds = nowTime.getHours() * 3600 + nowTime.getMinutes() * 60 + nowTime.getSeconds()

  // 計算目標(biāo)時間對應(yīng)的秒數(shù)
  targetSeconds =  targetHour * 3600

  //  判斷是否已超過今日目標(biāo)小時,若超過,時間間隔設(shè)置為距離明天目標(biāo)小時的距離
  timeInterval = targetSeconds > nowSeconds ? targetSeconds - nowSeconds: targetSeconds + 24 * 3600 - nowSeconds 

  setTimeout(getProductFileList,timeInterval * 1000)
}

function getProductFileList(){
  $.ajax()//你自己的數(shù)據(jù)處理函數(shù)
  setTimeout(getProductFileList,24*3600 * 1000)//之后每天調(diào)用一次
}
setRegular(8);//比如目標(biāo)是每天早上8點
2017年11月30日 17:31
編輯回答
念初

這個定時是不是用服務(wù)器端的crontab來做一次定時訪問某個頁面,然后在頁面的緩存中保存數(shù)據(jù)會容易些?

2018年8月9日 23:39