2016-08-02 158 views
0

我想要从数据库中动态创建的图表中存储highcharts数据,并将该数据重新放入highcharts。要存储在数据库中的数据创建一个像这样的字符串:动态填充的highcharts数据和数据库存储

var chartPoints = ""; 

var series = chart.series; 

for(var i = 0; i < series.length; i++) { 
    var numberOfPoints = series[i].data.length;  //Get number of points 

    for(var n = 0, length = numberOfPoints; n < length; n++) { 
     chartPoints += '[' + series[i].points[n].x + ',' + series[i].points[n].y + '],'; 

    } 
    chartPoints += '/,'; 
} 

这就造成这样的“[1470009600000,0]一个字符串,[1471219200000,0]/[1470009600000,-1],[ 1471219200000,-1],/,“x值是日期。这是系列之间带有“/”的2个系列。 2系列每个都有2个数据点。所有的数据点都有一个x和一个y值。这只是点数和系列数量较少的一个例子,为了使其工作。

问题是,我不知道我应该如何将这个字符串中的值推回到highcharts。我知道我可以动态地添加系列highcharts这样的:

chart.addSeries({       
    name: "Test", 
    data: [ 
      [x, y], 
      [x, y] 
     ] 
}); 

但我不知道该怎么做,与这样的字符串。我试图在字符串之外创建一个具有多个维度的数组,以便通过一些循环来从这些数据中提取值,但是我无法做到。做这个的最好方式是什么?

+0

为什么将斜杠和数据作为字符串而不是本机JSON返回? –

+0

告诉我你将如何完成它 – Koiski

+0

你可以使用一些基本的js函数来解析你的数据,但事实是它不是Highcharts的最佳格式,就像塞巴斯蒂安提到使用JSON而不是字符串会好得多。 http://jsfiddle.net/y3quyg4n/1/ –

回答

2

您是否想过将系列数据存储为json字符串,然后将其解析回对象并将其传递到数据参数中?你可以这样做:

var sData = JSON.stringify(chart.series[0].options.data); 

并将sData存储为字符串。然后加载回highcharts做:

var oData = JSON.parse(json_string_from_db); 

chart.addSeries({       
    name: "Test", 
    data: oData 
}); 

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

我做了一个普拉克:https://plnkr.co/edit/myGoss?p=preview其使用setData()设置数据,但在创建系列时会加载数据。

+0

不起作用...未捕获TypeError:将循环结构转换为JSON – Koiski

+0

尝试上面的更改,使用'chart.series [0] .options.data'获取数据。检查我制作的笨蛋来测试它。 –