2016-07-29 109 views
0

我的頭會打擊。Highcharts實時數據,json ajax

livedata.php在頁面打開時加載json。 live.php添加點到圖。

從livedata.php我得到這樣的輸出:

[["Date.UTC(2016, 07-1, 28, 15, 08)",37],["Date.UTC(2016, 07-1, 28, 15, 08)",37],["Date.UTC(2016, 07-1, 28, 15, 08)",37],["Date.UTC(2016, 07-1, 28, 15, 08)",37],["Date.UTC(2016, 07-1, 28, 15, 08)",37],["Date.UTC(2016, 07-1, 28, 15, 08)",37]] 

live.php輸出 - 只有最後一排,看起來像

["Date.UTC('.2016, 07-1, 29, 15, 40.')", 44] 

我有圖表,活addPoint工作,但在x軸上沒有日期。我做錯了什麼?

JS

var chart; 

function requestData() { 
    $.ajax({ 
     url: 'live.php', 
     success: function(point) { 
      var series = chart.series[0], 
       shift = series.data.length > 120; // shift if the series is 

       chart.series[0].addPoint(eval(point)); 

       setTimeout(requestData, 10000);  
     }, 
     cache: false 
    }); 
} 
$(function() { 
     $.ajax({ 
     url: 'livedata.php', 
     success: function(point) { 
      chart = new Highcharts.Chart({ 
       chart: { 
        renderTo: 'container', 
        type: 'areaspline', 

        events: { 
       load: requestData 
      } 
       }, 
       title: { 
        text: 'Revenue vs. Overhead', 

       }, 
       subtitle: { 
        text: '', 

       }, 
       xAxis: { 
        type: 'datetime' 


       }, 
       yAxis: { 
        title: { 
         text: 'Amount' 
        }, 
        plotLines: [{ 
         value: 0, 
         width: 1, 
         color: '#808080' 
        }] 
       }, 


       series: [{ 

      name: 'Random data', 
      data: eval(point) 
     }] 
      }); 
     },  

    }); 


}); 

live.php

global $dbConnection; 
    $stmt = $dbConnection->query('SELECT DATE_FORMAT(data,"%Y-%m-%d %H:%i") as dataa, humidity FROM sensorsdata order by id desc limit 1');  
    $row = $stmt->fetch(PDO::FETCH_ASSOC); 
    $date_raw = strftime('%Y, %m-1, %d, %H, %M', strtotime($row[dataa])); 
     $date_complete = "Date.UTC('.$date_raw.')"; 
    $ar = array($date_complete, $row[humidity]); 
    echo json_encode($ar, JSON_NUMERIC_CHECK); 

livedata.php

global $dbConnection; 
$stmt = $dbConnection->query('SELECT DATE_FORMAT(data,"%Y-%m-%d %H:%i") as dataa, humidity FROM sensorsdata');  

$result = $stmt->fetchAll(); 

foreach ($result as $row) { 
    $date_raw = strftime('%Y, %m-1, %d, %H, %M', strtotime($row[dataa])); 
    $date_complete = 'Date.UTC('.$date_raw.')'; 
    $hum_for_chart[] = [$date_complete, $row[humidity]]; 

} 

echo json_encode($hum_for_chart, JSON_NUMERIC_CHECK); 

圖: Chart

回答

0

我覺得它的問題您的數據儘量使串像,

live.php

.... 
$date_complete = "Date.UTC('.$date_raw.')"; 
$ar = "[".$date_complete.",". $row[humidity]."]"; 
echo json_encode($ar); 

livedata.php

.... 
foreach ($result as $row) { 
    $date_raw = strftime('%Y, %m-1, %d, %H, %M', strtotime($row[dataa])); 
    $date_complete = 'Date.UTC('.$date_raw.')'; 
    $hum_for_chart[] = "[".$date_complete.",". $row[humidity]."]"; 
} 
.... 

你可以參考highcharts-data-series-issue-with-ajax-json-and-php

+0

與字符串類型我得到了一個錯誤 Highcharts錯誤#12:www.highcharts.com/errors/12 highcharts.js:286 Uncaught TypeError:h.splice不是一個函數 –

0

我知道了! 2天的心靈吹)))))

感謝Rohan Kumar爲鏈接。 我做了從date.utc更改爲unix時間戳。

$datetimeUTC = ((strtotime($row[dataa])+ 10800) * 1000); 
$data[] = [$datetimeUTC, $row[humidity]]; 
echo json_encode($data); 
  • 10800 - 這爲+3小時(莫斯科時間)

輸出是

[[1469718529000,37],[1469718529000,37],[1469718530000,37],[1469718531000,37]] 

就是這樣,日線開始工作!