2012-03-29 7 views
2

8時間に5分ごとに関数を呼び出す必要があります。キャッチは同じ日になければならないということです。たとえば、ユーザーが3/29の午後11時59分にシステムにログオンし、3/30の午前12時30分になった場合、その関数はもはや呼び出されません。8分間隔で5分ごとにJavascript/Jqueryコールを呼び出す

私はそれを今まで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

は、事前に親切に

ネイサン

私は、コードを忘れてしまった申し訳ありませんが、ありがとうございました。クライアント側には多くのキャッチがあります。あなたはクーロンなどを使用できますか? – pollirrata

+0

あなたはsetTimeout()を持っているようです - それは一度だけ呼び出されますが、あなたは既にそれを知っていると思います。 – arnorhs

+1

異なるタイムゾーンなどのことについて考えましたか? – Magrangs

答えて

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

+0

問題はありません。ページが読み込まれたときにajax呼び出しを行うために少し変更したことに注意してください。 – satoshi

+0

実際に私はちょうど約5分でそのコードを一緒に投げました。私はそれをページロードで実行する必要はなく、8時間の間だけ5分ごとに開始し、開始した日にのみ実行します。私はあなたが元のコードだと思います。私はこれを答えとしてマークします。 5分ごとに完璧に実行され、残りの部分がさらに困難になることが確認されています。私たちは、このサイトが病院のWiFiネットワークのフィールドでiphoneのアウトに使われているので、私たちは毎日ログインする必要があるので、これを行う必要があります。私はあなたの助けに感謝します。私は日付を扱う方法が混乱していた。 – 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 
} 
関連する問題