高图表 - 无法通过AJAX填充系列数据

时间:2015-01-14 18:09:59

标签: php jquery ajax json highcharts

我遇到了一个简单的事情,即使用HighChart在Basic Bar中加载系列数据。我已经使用AJAX调用返回了数据,但问题是当返回数据时,图表不会被加载。但是,如果我将我返回的数据复制/粘贴到系列中,它就可以正常工作。

提到我没有使用JSON编码。我刚刚制作了弦乐并回应了它。下面是我实际想要实现的,我的JS / HTML和我要显示的返回字符串

高图表示例:

  

http://www.highcharts.com/demo/bar-basic

我的Javascript和HTML

  

http://jsfiddle.net/7c3gqwr9/

我的返回数据:

{name:'Total_Trans',data:[8798,88976,18564,8486]}, {name:'Sucesss',data:[6304,57642,8702,5202]}, {name:'MoreThan30',data:[208,1588,449,163]}, {name:'LessThan30',data:[8551,86864,18034,8290]}, {name:'NadraMoreThan30',data:[1535,4187,2634,1310]}, {name:'NadraLessThan30',data:[6024,66179,9812,5239]}

1 个答案:

答案 0 :(得分:0)

您返回的数据不是 JSON。

至少它需要在" []"迹象。而不是

{name:'Total_Trans',data:[8798,88976,18564,8486]}, {name:'Sucesss'...,5239]}

你需要

[{name:'Total_Trans',data:[8798,88976,18564,8486]}, {name:'Sucesss'...,5239]}]

您是否有机会在json_encode()内输出多个foreach()

你应该这样做:

$series = array();
foreach (...) {
     $series[] = array(
         'name'  => $record['name'], // "Hello world"
         'data'  => $data, // array(1,2,3,4);
     );
}
Header('Content-type: application/json');
die(json_encode($series));

如果数据行本身来自另一个周期,则需要类似

的内容
$series = array();
foreach (...) {
     $data = array();
     foreach (...) {
         $data[] = $tuple['value'];
     }
     $series[] = array(
         'name'  => $record['name'], // "Hello world"
         'data'  => $data, // array(1,2,3,4);
     );
}
Header('Content-type: application/json');
die(json_encode($series));

在调用AJAX之前,您可以正常声明HighCharts图表。它将显示一个空图表,您将拥有一个HighCharts对象。您也可以在AJAX返回功能中执行此操作,但事先准备好图表会更好。

然后你可以调用AJAX来获取一个数据块,仍然需要正确的JSON (没有其他简单的方法),并解码它:

var ch = $('#container').highcharts();
for (blk in jawad) {
    ch.addSeries(javad[blk]);
}

但要做到这一点,你的AJAX必须返回一个正确的MIME类型的JSON数组。如果它返回一个字符串,整个设置就不会起作用。