2012-01-19 91 views
0

我有一個關於javascript/php cron問題的問題。以及它本身不是一個問題,但在我的情況是這樣。 我有下面的JavaScript設置一個cookie並倒計數直到該cookie的時間結束。在我的情況下是10分鐘。 我也有一個每10分鐘運行一次的cron文件。 我想用cron文件同步倒計時。php倒計時服務器端

下面的腳本效果很好,當我從頁面調用它但它會從用戶訪問頁面和它的不同步使用cron文件進出口運行時間倒計時。

我明白這不是一個PHP的問題,但網頁即時通訊顯示腳本PHP。

我任何指針? 幫助將不勝感激。 謝謝您的閱讀。

我只有下方。

<div id="countre4"> 
    <script type="text/javascript"> 
function setCookie(c_name, value) 
    { 
     var exdate = new Date(); 
     exdate.setDate(exdate.getDate() + 14); 

     var c_value = escape(value) + "; expires=" + exdate.toUTCString(); 
     document.cookie = c_name + "=" + c_value; 
    } 

    function mycountre(countdownId, countdownTarget, countdownSeconds, countdownLooping){ 
     var countre = document.getElementById(countdownId); // get html element 
     if (!countre) { 
      return; 
     } 

     var target = countdownTarget; // target time 
     var intervalId; // id of the interval 

     setCookie("time", target); 

     // update function 
     function updatecountre(){ 
      var time = Math.floor((target - new Date().getTime())/1000); // countdown time in seconds 
      if (time < 0) { // if countdown ends 
       if (countdownLooping) { // if it should loop 
        target += 1000 * countdownSeconds; // set new target time 
        time = Math.floor((target - new Date().getTime())/1000); // recalculate current time 

        setCookie("time", target); 
       } else { // otherwise 
        clearInterval(intervalId); // clear interval 
        time = 0; // set time to 0 to avoid displaying negative values 
       } 
      } 

      // split time to seconds, minutes and hours 
      var seconds = '0' + (time % 60); 
      time = (time - seconds)/60; 
      var minutes = '0' + (time % 60); 
      time = (time - minutes)/60; 
      var hours = '0' + time; 

      // make string from splited values 
      var str = hours.substring(hours.length - 2) + ':' + minutes.substring(minutes.length - 2) + ':' + seconds.substring(seconds.length - 2); 
      countre.innerHTML = str; 
     } 

     intervalId = setInterval(updatecountre, 200); // start interval to execute update function periodically 
    }; 

    var parts = document.cookie.split(';'); 
    var cookie = new Date().getTime() + 1000 * 15 * 60; 

    for (var i = 0; i < parts.length; ++i) { 
     if (parts[i].trim().indexOf('time') == 0) { 
      var value = parts[i].trim().split('='); 
      cookie = parseInt(value[1]); 
     } 
    } 

    mycountre(
     'countre4', // id of the html element 
     cookie, 
     10 * 60, // time in seconds (10min here) 
     true // loop after countdown ends? 
    ); 


</script> 
</div> 

回答

2

也許你應該重新考慮你的方法。不要將cookie用於實際存儲在服務器上的信息。

怎麼樣,而不是一個cookie,每個PHP頁面簡單地設置你還剩多少時間的全局變量JS。東西這樣的東西:

<script> 
    var timeLeft = <? echo $timeLeftInMilliseconds ?>; 
    startCounter(timeleft); 
</script> 

然後你的計數器腳本可以讀取,並相應地動畫一個計數器。這就讓你的服務器端代碼能夠在下一個cron發生時準確提供。

+0

我將如何在腳本上實現它。我在那裏做的一切都取決於cookie。 :( – user631756 2012-01-19 01:15:52

+0

不幸的是,我想在一個很好的方式說「你沒有錯。」重構你的JavaScript接受的值更直接,而不是使用cookie都沒有。 – 2012-01-19 01:25:39

+0

笑。生病嘗試另一種方法。謝謝你回覆。 – user631756 2012-01-19 01:40:37