【问题标题】:Highcharts add point to line chart with jsonHighcharts使用json添加点到折线图
【发布时间】:2015-05-14 08:48:56
【问题描述】:

我需要从我从 mysql 数据库获得的数据中添加点。这时候,我通过json获取数据,但我不知道为什么在输出数组中,数据有这样的双引号(“”):

["{name:'Chip 3',data:[[moment('2015-05-14 13:26:21','HH:mm:ss').valueOf(),29],[moment('2015-05-14 13
:26:51','HH:mm:ss').valueOf(),29],[moment('2015-05-14 13:27:21','HH:mm:ss').valueOf(),29],[moment('2015-05-14
 13:27:51','HH:mm:ss').valueOf(),29],[moment('2015-05-14 13:28:21','HH:mm:ss').valueOf(),29],[moment('2015-05-14
 14:42:54','HH:mm:ss').valueOf(),32],]}"]

因此 Highcharts 无法访问数据并在图表上显示数据。现在我需要从数组中删除双引号或做其他事情来使 Highcharts 可以重新调整数据。

这是我在 data.php 文件中的代码,用于获取和更新系列数据。

<?php

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


 include_once 'include/connection.php';
 $db = new DB_Class(); 



     $query = "select distinct idchip from datatable ";
     $result = mysql_query( $query );
     $rows = array();
     $count = 0;
     $getall = array();
     while( $row = mysql_fetch_array( $result ) ) {

         $table = array();

         $query2 = "select datetime,temperature from datatable where idchip=".$row['idchip'].' group by datetime ';

            $dataresult = mysql_query($query2);
            while($datarow = mysql_fetch_array($dataresult))
            {

                $data = '';


                $datatimes .= $datarow['0'].',';


                $data .= "[moment('".$datarow['0']."','HH:mm:ss').valueOf(),".(integer)$datarow['1']."],";
                $stringdata .= $data;

                }

        $newstring = $stringdata ;

        $stringdata = '';
        $stringtime = '';

        $namedata = "{name:'Chip ".$row["idchip"]."',data:[$newstring]}";
        $getall[] = $namedata;


     }


echo json_encode($getall);
?>

这是我用来获取 ajax 返回数据的代码。

function getData() {
        jQuery.ajax({
            url: 'data.php',
            type: 'GET',
            dataType: 'json',
            mimeType: 'multipart/form-data',
            contentType: false,
            cache: false,
            processData: false,
            success: function( data, jqXHR ) {
                if( data == "null" ) {

                } else {
                  $.getJSON("data.php", function(json) {

            chart = new Highcharts.Chart({
               chart: {
                renderTo: 'container',
                defaultSeriesType: 'spline',
                events: {
               //     load: requestData
                }
            },
 series: json

            });
        });
                }
            },
            error: function( textStatus ) {
                console.log(" error. damm. ");
                //console.log(error);
            }
        });
    } 

【问题讨论】:

  • 问题在于您在 php.ini 中构造 json 对象的方式。请查看此json。您不必创建 json 字符串。您需要创建最终数组,然后只需使用 json_encode($getall);就可以了
  • @irfanrasool 问题是如果我通过 json 数组添加,我无法在数组中添加 [moment(...)] 或类似的东西。你能告诉我怎么做吗?
  • 一般在json中不能使用函数,因为不会运行/评估,所以irfan rasool的建议是正确的。
  • @SebastianBochan 你能在这个链接上帮助我吗,我有一个正确的方向可以遵循,:D。 stackoverflow.com/questions/30233041/…
  • 您的链接与当前主题相同。

标签: javascript php mysql json highcharts


【解决方案1】:

我觉得是这样的

    $query = "select distinct idchip from datatable ";
    $result = mysql_query( $query );
    $rows = array();
    $count = 0;
    $getall = array();
    while( $row = mysql_fetch_array( $result ) ) {

        $table = array();
        $stringdata = array();
        $query2 = "select datetime,temperature from datatable where idchip=".$row['idchip'].' group by datetime ';

        $dataresult = mysql_query($query2);

        $stringdata = array();
        while($datarow = mysql_fetch_array($dataresult))
        {
            $stringdata[] = "moment('".$datarow['0']."','HH:mm:ss').valueOf(),".(integer)$datarow['1'];
        }

        $namedata['name'] = "Chip ".$row["idchip"];
        $namedata['data'] =  $stringdata;
        $getall[] = $namedata;
    }

    echo json_encode($getall);

【讨论】:

  • 使用此代码输出数据将是这样的: [{"name":"Chip 3","data":["moment('2015-05-14 13:26:21', 'HH:mm:ss').valueOf(),29","moment('2015-05-14 13:26:51','HH:mm:ss').valueOf(),29",}]但是Highcharts需要的格式是这样的: [name:"some thing", data:[moment('date','HH:mm:ss').valueOf(),'another data' ]]; ——
  • 那么你必须创建 js 平面数组,你将把它提供给 highchart 实例
  • 向我显示你从服务器端获取的输出以及你需要的 highchart 输出,以便我为你提供 js
  • 这是我的代码的输出:[{"name":"Chip 3","data":[["moment('2015-05-14 13:26:21','HH :mm:ss').valueOf()",29],["moment('2015-05-14 13:26:51','HH:mm:ss').valueOf()",29],[ "时刻('2015-05-14 13:27:21','HH:mm:ss').valueOf()",29]].
  • 这是我需要的输出格式。 [ {"name":" name retrieved from mysql", "data":[moment:('date from mysql','HH:mm:ss'.valueOf()), data from mysql ], [another moment point] }]。这是我需要的示例数据(瞬间没有双引号......):。 {name:'Chip 3',data:[[moment('2015-05-14 13:26:21','YYYY-MM-DD HH:mm:ss').valueOf(),29] ] } 谢谢你这么多,
猜你喜欢
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
相关资源
最近更新 更多