1

首先,我必须承认我对 jQuery 和 Json 的了解并不多。基本上我的 json 编码是这样的 ["2013-06-18 09:42:30",6.21],["2013-06-18 09:44:30",6.57],["2013-06-18 10: 01:49",6.61],......这些是电池电压在给定日期和时间不断更新的结果。有数百条记录。我知道这个时间戳在绘制图表时无效,所以昨天我试图调整 jSfiddle 中的 jQuery 以获得结果并将其转换为图表。在 Jsfiddle 工作时,它说我的代码很好,但我得到了一个空白容器区域。

谁能指导我如何转换UTC中的日期时间戳以便绘制图表。

我正在调整的 jQuery 看起来像这样:

    var chart;

    chart = new Highcharts.Chart({
chart: {
        renderTo: 'container',
        defaultSeriesType: 'spline',
        events: {
            load: requestData
        }},
xAxis: {
     type: 'datetime',
     dateTimeLabelFormats: {
     month: '%e. %b',
     year: '%b'
     }
  },
  yAxis: {
     title: {
        text: 'Battery Voltage'
     },
     plotLines: [{
        value: 0,
        width: 1,
        color: '#808080'
     }]
  },
  tooltip: {
      formatter: function() {
        return '<b>'+ this.series.name +'</b><br/>'+
          Highcharts.dateFormat('%a %d %b %H:%M:%S', this.x) +' : '+ this.y +" V";
      }
  },

series: [{
     name: 'Battery Volatge',
     data: []
    }]
});



function requestData() {
$.ajax({
    url: 'data.php',
    datatype: "json",
    success: function(data) {

        alert(data);

        chart.series[0].setData(data);

    },
    cache: false
});
}

我的 PHP 看起来像这样:

<?php
  header("Content-type: text/json");

     $dbc = mysql_connect('xxxxx','xxxxx','xxxxx') or die(mysql_error());
   mysql_select_db('xxxxx',$dbc) or die(mysql_error());

       $result = mysql_query("SELECT COUNT(*) AS count FROM Station_State");
       $row = mysql_fetch_array($result,MYSQL_ASSOC);

      $SQL = "SELECT ss_Stamp,ss_BatteryStatus FROM Station_State WHERE Station_State_Index > 371298 AND ss_Station_idx = 34 ORDER BY ss_Stamp";

      $result = mysql_query( $SQL ) or die("Couldn?t execute query.".mysql_error());

      $i=0;
      while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {

     $row[ss_BatteryStatus] = (float) $row[ss_BatteryStatus];

$rows[$i]=array($row[ss_Stamp],$row[ss_BatteryStatus]);

$i++;
  }

     echo json_encode($rows);


 ?>

这可能是一个基本问题,但我仍在学习,所以任何建议都会受到赞赏。如果您需要更多信息或我提到的任何内容听起来含糊不清,请告诉我。

谢谢

4

2 回答 2

2

您可以简单地预处理您的数据。在设置数据循环遍历所有点之前,将该字符串转换为时间戳,例如:

for (var i = 0; i < data.length; i++ ){ 
    data[i][0] = new Date(data[i][0]).getTime();
}
于 2013-07-12T10:48:23.273 回答
0

发布代码完美运行。唯一的问题是弹出一个带有编码数据的窗口。jQuery代码:

$(function () {

$(document).ready(function() {
    Highcharts.setOptions({
        global: {
            useUTC: false
        }
    });
var chart;

chart = new Highcharts.Chart({
chart: {
        renderTo: 'container',
        defaultSeriesType: 'spline',
        borderwidth: 0,
        events: {
            load: requestData
        }},
        title: {
            text: 'Battery Graph'
            },
xAxis: {
     type: 'datetime',
     dateTimeLabelFormats: {
     month: '%e. %b',
     year: '%b'
     }
  },
  yAxis: {
     title: {
        text: 'Battery Performance Voltage'
     },
     plotLines: [{
        value: 0,
        width: 1,
        color: '#808080'
     }]
  },
  tooltip: {
      formatter: function() {
        return '<b>'+ this.series.name +'</b><br/>'+
          Highcharts.dateFormat('%a %d %b %H:%M:%S', this.x) +' : '+ this.y +" V";
      }
  },

series: [{
     showInLegend: false,
     name: 'Time vs Volatge',
     data: []
    }]
});


function requestData() {
$.ajax({
    url: 'bdata.php',
    datatype: "json",

    success: function(data) {

        alert(data);
        for (var i = 0; i < data.length; i++ ){ 
       data[i][0] = new Date(data[i][0]).getTime();
       }

       chart.series[0].setData(data);

    },

    cache: false
});
};
});

});

我的 PHP 代码如下所示:

<?php
header("Content-type: text/json");

 $dbc = mysql_connect('xxxx','xxxx','xxxx') or die(mysql_error());
   mysql_select_db('xxxx',$dbc) or die(mysql_error());

$result = mysql_query("SELECT COUNT(*) AS count FROM xxxx");
$row = mysql_fetch_array($result,MYSQL_ASSOC);

$SQL = "SELECT ss_Stamp,ss_BatteryStatus FROM Station_State WHERE Station_State_Index >  377708 AND ss_Station_idx = 34 ORDER BY ss_Stamp";

$result = mysql_query( $SQL ) or die("Couldn?t execute query.".mysql_error());


$i=0;

while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {

$row[ss_BatteryStatus] = (float) $row[ss_BatteryStatus];

$rows[$i]=array($row[ss_Stamp],$row[ss_BatteryStatus]);

$i++;
}

echo json_encode($rows);

?>

谢谢帕维尔。你帮了大忙。

于 2013-07-15T10:18:57.840 回答