2012-03-29 37 views
2

我需要每8分鐘撥打一個功能,每5分鐘一次。抓住的是它必須是在同一天。例如,如果用戶在3/29上午11:59登錄系統,現在在3/30上午12:01,則​​不應再調用該函數。Javascript/jquery在8小時內每5分鐘撥打一次功能

我知道如何調用它5分鐘,並有jquery ajax調用編碼。那部分很好。我的問題是確定日期。有人請幫助我嗎?如果需要,我可以提供更多細節。

衷心感謝你提前,

彌敦道

對不起,我忘了代碼:

var startDay; 

function keepAlive(currDay) { 
    var today = new Date().getDate(); 
    if (currDay == today) { 
     $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      data: "{ alive: 'true' }", 
      url: "../ses/imsi_ses_edit.aspx/KeepSessionAlive", 
      dataType: "json", 
      success: function(data) { 
      }, 
      error: function(response) { 
       alert(response.responseText); 
      } 
     }); 
    } 
} 
window.onload = function() { 
    startDay = new Date().getDate(); 
    keepAlive(startDay); //Make sure the function fires as soon as the page is loaded 

    setTimeout(keepAlive, 300000); //Then set it to run again after five minutes 
} 
+0

我認爲這將是在服務器端更容易。在客戶端有很多捕獲。你可以使用cron或類似的東西? – pollirrata 2012-03-29 15:59:31

+0

你似乎有一個setTimeout() - 只會被調用一次,但我認爲你已經知道了。 – arnorhs 2012-03-29 16:00:42

+1

你有沒有想過像不同的時區等東西? – Magrangs 2012-03-29 16:00:56

回答

6
var initDate = new Date(); // Or get the user login date from an HTML element (i.e. hidden input) 
var interval; 

function keepAlive() { 
    // Do stuff (ajax call) 
} 

window.onload = function() { 
    keepAlive(); 

    interval = window.setInterval(function() { 
     var now = new Date(); 
     if(now.getTime() - initDate.getTime() < 8*60*60*1000 && now.getDate() == initDate.getDate()) { 
      keepAlive(); 
     } 
     else { 
      // Stop the interval 
      window.clearInterval(interval); 
     } 
    }, 5*60*1000); 
} 
+0

嗨,我會嘗試你提供的代碼。感謝您的幫助。 – Nathan 2012-03-29 16:08:01

+0

沒問題,請注意,爲了在加載頁面時進行ajax調用(稍微改變了代碼) – satoshi 2012-03-29 16:13:01

+0

其實我只是在大約5分鐘內把代碼扔到了一起。我不需要它在頁面加載時運行,只有每5分鐘持續8小時,並且只在啓動的那一天運行。我認爲你是原始代碼就是我所需要的。我將把這標記爲答案。它每隔5分鐘就會完美運行一次,證實其餘的將會是更大的挑戰。我們必須這樣做,因爲這個網站被iphone用在醫院的無線網絡領域,他們不斷被淘汰,但我們希望他們每天都必須登錄。我感謝您的幫助。我很困惑如何處理日期。 – Nathan 2012-03-29 16:53:02

2
function keepAlive(currDay) {   
    $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     data: "{ alive: 'true' }", 
     url: "../ses/imsi_ses_edit.aspx/KeepSessionAlive", 
     dataType: "json", 
     success: function(data) { 
     }, 
     error: function(response) { 
      alert(response.responseText); 
     } 
    }); 
} 
window.onload = function() { 
    var startDay = new Date().getDate(); 
    var startTime = new Date().getTime(); 
    var interval; 
    keepAlive(startDay); //Make sure the function fires as soon as the page is loaded 

    interval = setInterval(function() { 
     if (startDay != new Date().getDate() || startTime < (new Date().getTime() - 1000*60*60*8)) { 
      clearInterval(interval); 
      return; 
     } 
     keepAlive(); 
    }, 300000); //Then set it to run again after five minutes 
}