2012-03-29 11 views
2

Ich muss eine Funktion alle 5 Minuten für einen Zeitraum von 8 Stunden aufrufen. Der Haken ist es muss am selben Tag sein. Wenn sich der Benutzer zum Beispiel am 23.3. Um 23:59 Uhr am System anmeldet und es jetzt am 03.03. Um 12:01 Uhr ist, sollte die Funktion nicht mehr aufgerufen werden.Javascript/Jquery Call-Funktion alle 5 Minuten für einen Zeitraum von 8 Stunden

Ich weiß, wie man es jemals 5 Minuten nennen und haben den Jquery Ajax Anruf codiert. Dieser Teil ist in Ordnung. Mein Problem ist herauszufinden, das Datum. Wird mir bitte jemand helfen? Ich kann bei Bedarf mehr Details zur Verfügung stellen.

Herzlichen Dank im Voraus,

Nathan

Leider habe ich den Code vergessen haben:

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

Ich denke, dies auf der Serverseite leichter sein wird. Auf Kundenseite gibt es viele Fänge. Kannst du einen Cron oder so etwas benutzen? – pollirrata

+0

Sie scheinen ein setTimeout() zu haben - das nur einmal aufgerufen wird, aber ich nehme an, dass Sie das bereits wissen. – arnorhs

+1

Haben Sie über Dinge wie verschiedene Zeitzonen usw. nachgedacht? – Magrangs

Antwort

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

Hi Satoshi, ich werde den von dir bereitgestellten Code ausprobieren. Danke für die Hilfe. – Nathan

+0

Kein Problem, beachten Sie, dass ich es leicht geändert habe, um den Ajax-Aufruf zu machen, wenn die Seite geladen wird (Blick auf Ihren Code scheint das zu sein) – satoshi

+0

Eigentlich habe ich den Code in nur 5 Minuten zusammengeworfen. Ich brauche es nicht zum Laden der Seite, nur alle 5 Minuten für eine Dauer von 8 Stunden und nur am Tag, an dem es gestartet wurde. Ich denke du bist originaler Code ist was ich brauchte. Ich werde dies als die Antwort markieren. Es läuft alle 5 Minuten perfekt und bestätigt, dass der Rest eine größere Herausforderung sein wird. Wir müssen dies tun, da diese Seite von iPhones im Bereich der Krankenhaus-WLAN-Netzwerke verwendet wird und sie immer wieder abgeschlagen werden, aber wir wollen, dass sie sich jeden Tag einloggen müssen. Ich schätze Ihre Hilfe. Ich war verwirrt, wie man mit dem Date umgeht. – Nathan

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 
} 
Verwandte Themen