2012-01-19 6 views
0

У меня есть вопрос о проблеме javascript/php cron. ну это не проблема сама по себе, но в моем случае это так. У меня есть javascript, который устанавливает cookie и отсчитывает до конца времени этого файла cookie. в моем случае его 10 минут. У меня также есть файл cron, который запускается каждые 10 минут. Я хотел бы синхронизировать обратный отсчет с файлом cron.php countdown серверная сторона

Приведенный ниже сценарий хорошо работает, когда я вызываю его со страницы, однако он отсчитывается с момента, когда пользователь посещает страницу и ее синхронизацию с запущенным файлом cron.

Я понимаю, что это не вопрос php, но страницы im, отображающие скрипты, являются 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 для части информации, фактически хранящейся на сервере.

Как насчет печенья, каждая страница PHP просто устанавливает глобальную переменную JS для того, сколько времени у вас осталось. Что-то вроде такого:

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

Тогда ваш скрипт счетчика может прочитать это и анимировать счетчик соответственно. Это приведет к тому, что ваш код на стороне сервера будет точно доставляться, когда произойдет следующий cron.

+0

Как бы реализовать его на моем скрипте. все, что я там делал, зависит от файла cookie. :( – user631756

+0

К сожалению, я пытаюсь сказать красиво «вы сделали это неправильно». Рефакторите свой javascript, чтобы принять значение больше напрямую, а не использовать cookie. –

+0

lol. Плохо попробуйте другой подход. ответить. – user631756

Смежные вопросы