在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

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

1.頁(yè)面客戶(hù)長(zhǎng)期打開(kāi),需要在每天某個(gè)時(shí)間進(jìn)行定時(shí)刷新數(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('溫馨提示', '此條件下無(wú)數(shù)據(jù)!', 'info');
            }
        },
        /*error: function(xhr, textStatus) {
            $.messager.alert('溫馨提示', '訪(fǎng)問(wèn)出錯(cuò)!', 'info');
        },*/
        complete: ajaxLoadEnd
    });
    meter1=setTimeout("getProductFileList()", 20000);
    console.log("getProductFileList()"+meter1)
}

通過(guò)此方法可以沒(méi)20秒刷新一次,但是無(wú)法做到每天某個(gè)時(shí)間定時(shí)刷新。

回答
編輯回答
別瞎鬧

為啥要自動(dòng)刷頁(yè)面。。這種需求明顯是要websocket 啊。你這樣刷,沒(méi)幾天,哦不。沒(méi)幾個(gè)小時(shí)瀏覽器就卡死崩潰了

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

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

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

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

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

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

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

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

A方法在客戶(hù)打開(kāi)頁(yè)面時(shí)執(zhí)行一次。

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

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

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

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

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

  //  判斷是否已超過(guò)今日目標(biāo)小時(shí),若超過(guò),時(shí)間間隔設(shè)置為距離明天目標(biāo)小時(shí)的距離
  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點(diǎn)
2017年11月30日 17:31
編輯回答
念初

這個(gè)定時(shí)是不是用服務(wù)器端的crontab來(lái)做一次定時(shí)訪(fǎng)問(wèn)某個(gè)頁(yè)面,然后在頁(yè)面的緩存中保存數(shù)據(jù)會(huì)容易些?

2018年8月9日 23:39