Как правильно передать массив данных временных рядов в JavaScript Flots? - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть php-страница для получения данных sqlight. Нижняя часть является важной, в которой я подготовил ее для построения графика Флота (временная метка эпохи Unix как данные временных рядов в массиве). Что я делаю неправильно? Пожалуйста посоветуй.

echo json_encode ($ dataset1) в части php

дает:

[1320710855000,44] [1320711755000,46] [1320712655000,44] [1320713555000,42] [1320714456000,56] .. и Chromes Resources показывают:

script type = "text / javascript"> var kurve = [1320774758000,72];

<?php
 error_reporting(E_ALL);
 try {
    /*** DB erstellen ***/
    $dbh = new PDO('sqlite:/var/www/zaehler/inc/db/zaehler.sqlite');
    /*** set all errors to excptions ***/
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $startdate=startdate();
    $sql = "SELECT date FROM energielog ORDER BY OID DESC LIMIT 1";
    $result = $dbh->query($sql);
    foreach($result as $row) {
          if ($row['date']!=$startdate) {
              $startdate=$row['date'];
                  }
          }
    $sql = "SELECT kwh, peak, OID, date, time FROM energielog WHERE date >=".$startdate." ORDER BY OID ASC";
    $result = $dbh->query($sql);

    foreach($result as $row) {                
            $oid=$row['OID']-1;
            $sql2 = "SELECT kwh FROM energielog WHERE oid <".$oid." ORDER BY OID DESC LIMIT 1";
            $result2 = $dbh->query($sql2);
            foreach($result2 as $row2) {
                    $letzter_eintrag=str_replace(",",".",$row2['kwh']);
                    }
                    $aktueller_eintrag=str_replace(",",".",$row['kwh']);
                    $eintrag=round(($aktueller_eintrag-$letzter_eintrag)*1000/0.5,0);
                    $peak=$row['peak']*1000;                       
                    $time=str_pad($row['time'],6,'0',STR_PAD_LEFT);
                    $times=substr($time,0,2).":".substr($time,2,2);                       
                    $timeStamp=mktime(
                    substr($time,0,2),
                    substr($time,2,2),
                    substr($time,4,2),
                    substr($startdate,2,2),
                    substr($startdate,4,2),
                    substr($startdate,0,2)
                    );                        
                   $dataset1 = array(($timeStamp)*1000, $eintrag);                       
                   echo json_encode($dataset1);
            }
}
catch(Exception $e)
{
    echo $e->getMessage();
    die();
}   
?>  
<div id="placeholder" style="width:600px;height:300px;"></div>
<script type="text/javascript">

var kurve = <?php echo json_encode($dataset1); ?>;

$(function () {    
$.plot($("#placeholder"), [kurve], { xaxis: { mode: "time",  timeformat: "%y/%m/%d/%H:%M"} });    
});
</script>

1 Ответ

1 голос
/ 27 декабря 2011

Глядя на это очень быстро, несколько вещей бросаются на меня.

Один:

var kurve = "<?php echo json_encode($dataset1); ?>";

Вы не хотите, чтобы " вокруг PHP.Это приведет к тому, что kurve var станет строкой, а не массивом массивов.

Two:

[1320710855000,44][1320711755000,46][1320712655000,44][1320713555000,42][1320714456000,56]

Вы или эхо-оператор сбросили , между каждой точкой массива?Это не будет действительным синтаксисом JS.

РЕДАКТИРОВАТЬ

Я вижу это сейчас.dataset1 повторно объявляется в каждом цикле.Вы хотите:

$dataset1 = array();
foreach($result as $row) {
  <do your processing..?
  array_push($dataset1, array(($timeStamp)*1000, $eintrag));
}
...