2013-11-15 5 views
2

Я использую графики флота в реальном времени, и у меня возникают проблемы с обновлением моих значений на графике. У меня есть PHP-код для извлечения значения и сохранения его в переменной, но по мере того как я пришел, чтобы изучить PHP-код rus, прежде чем pnage будет отображаться в браузере, и он снова запускается снова, если я обновляю страницу. Есть ли способ заставить этот PHP-код извлекать значение из файла каждую минуту и ​​построить его?Получайте переменную PHP каждую минуту

Это мой код:

<?php 
    function act(){ 
    $filename = "(...)/CS.txt"; 
    $handle = fopen($filename, "r"); 
    $contents = fread($handle, filesize($filename)); 
    fclose($handle); 
    return $contents; 
    }; 
?> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script type="text/javascript" src="http://static.pureexample.com/js/flot/jquery.flot.min.js"></script> 
<script type="text/javascript" src="http://static.pureexample.com/js/flot/jquery.flot.time.js"></script> 
<script type="text/javascript" src="http://static.pureexample.com/js/flot/jquery.flot.axislabels.js"></script> 

<!-- CSS --> 
<style type="text/css"> 
    #flotcontainer { 
     width: 95%; 
     height: 95%; 
     text-align: center; 
     margin: 0 auto; 
    } 
</style> 

<!-- Javascript --> 
<script> 
function cs() { 
     var val = <?php echo act(); ?>; 
     return val; 
}; 

    var data = []; 
    var dataset; 
    var totalPoints = 50; 
    var updateInterval = 1000; 
    var now = new Date().getTime(); 


    function GetData() { 
     data.shift(); 

     while (data.length < totalPoints) { 
      var y = cs(); 
      var temp = [now += updateInterval, y]; 

      data.push(temp); 
     } 
    } 

    var options = { 
     series: { 
      lines: { 
       show: true, 
       lineWidth: 1.2, 
       fill: true 
      } 
     }, 
     xaxis: { 
      mode: "time", 
      tickSize: [2, "second"], 
      tickFormatter: function (v, axis) { 
       var date = new Date(v); 

       if (date.getSeconds() % 20 == 0) { 
        var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(); 
        var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(); 
        var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds(); 

        return hours + ":" + minutes + ":" + seconds; 
       } else { 
        return ""; 
       } 
      }, 
      axisLabel: "Horas", 
      axisLabelUseCanvas: true, 
      axisLabelFontSizePixels: 12, 
      axisLabelFontFamily: 'Verdana, Arial', 
      axisLabelPadding: 10 
     }, 
     yaxis: { 
      min: 0, 
      max: 300, 
      tickSize: 5, 
      tickFormatter: function (v, axis) { 
       if (v % 10 == 0) { 
        return v + ""; 
       } else { 
        return ""; 
       } 
      }, 
      axisLabel: "Número de CS's", 
      axisLabelUseCanvas: true, 
      axisLabelFontSizePixels: 12, 
      axisLabelFontFamily: 'Verdana, Arial', 
      axisLabelPadding: 6 
     }, 
     legend: { 
      labelBoxBorderColor: "#fff" 
     } 
    }; 

    $(document).ready(function() { 
     GetData(); 

     dataset = [ 
      { label: "CS's", data: data } 
     ]; 

     $.plot($("#flotcontainer"), dataset, options); 

     function update() { 
      GetData(); 

      $.plot($("#flotcontainer"), dataset, options) 
      setTimeout(update, updateInterval); 
     } 

     update(); 
    }); 

</script> 

<!-- HTML --> 
<div id="flotcontainer"></div> 
+2

Вы можете использовать [Ajax] (http://api.jquery.com/jQuery.ajax/) для этого. – Ibu

+0

Нет никакой возможности обновлять значения php каждую минуту без перезагрузки страницы. Но JavaScript может запрашивать php для значения через ajax каждую минуту без перезагрузки страницы. –

+0

Я читал об этом, но так как я не знаю Ajax, я не могу заставить его работать = \ –

ответ

2

Вы уже используете JQuery, как я могу видеть, давайте смешаться в некоторых Ajax, легко управляется с помощью JQuery.
Сначала поставить функцию act() в отдельном файле PHP, скажем act.php на том же каталоге, и сделать его echo $contents вместо того, чтобы вернуться:

act.php:

function act(){ 
$filename = "(...)/CS.txt"; 
$handle = fopen($filename, "r"); 
$contents = fread($handle, filesize($filename)); 
fclose($handle); 
echo $contents; 
}; 

затем на Javascript глобальный масштаб:

var val; //setting the val into global scope 
//this will get the value echoed in act.php every 60000 miliseconds (1 minute) and set it on val variable; 
var myInterval = setInterval(function(){ $.get('act.php' function(data){ val = data}}, 60000); 

Изменить этот р искусство из вашего кода:

while (data.length < totalPoints) { 
    var y = cs(); 

Вместо этого используйте var y = val; Мы устанавливаем значения в глобальную переменную «val» каждую минуту.


Всякий раз, когда вы хотите, чтобы остановить страницу выборки выход act.php, всего использовать clearInterval(myInterval)


Объяснение

  • Это непроверенный код, как я не есть флот и никогда не использовал его, поэтому возьмите его как псевдокод, возможно, вам нужно исправить ошибку.

Основном Мы используем setInterval() звонить каждые 60 секунд в анонимную функцию, которая делает Ajax вызова JQuery для act.php через получить, и устанавливает его значение в переменную «валь».

Вы могли бы также (и я предлагаю вам) определить функцию, а именно: функция fetchAct(){....} со всей $.get.... части внутри него и называют его позже: setInterval(fetchAct, 60000);

Имейте в виде, чтобы назначить интервал в переменную var myInterval = setInterval(...) так вы можете остановить его в любое время вы хотите с clearInterval(myInterval);

Короче:

+0

Thank youuu !!!! –

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