我正在开发一个使用yii2的应用程序,我想集成米洛舒曼图表扩展
默认使用
echo Highcharts::widget([
'scripts' => [
'modules/exporting',
'themes/grid-light',
],
'options' => [
'title' => [
'text' => 'Trucks chart',
],
'xAxis' => [
'categories' => ['Apples', 'Oranges', 'Pears', 'Bananas', 'Plums'],
],
'labels' => [
'items' => [
[
'html' => 'Total fruit consumption',
'style' => [
'left' => '50px',
'top' => '18px',
'color' => new JsExpression('(Highcharts.theme && Highcharts.theme.textColor) || "black"'),
],
],
],
],
'series' => [
[
'type' => 'column',
'name' => 'Rejected trucks',
'data' => [3, 2, 1, 3, 4],
],
[
'type' => 'column',
'name' => 'Approved trucks',
'data' => [2, 3, 5, 7, 6],
],
[
'type' => 'column',
'name' => 'Joe',
'data' => [4, 3, 3, 9, 0],
],
/*[
'type' => 'spline',
'name' => 'Average',
'data' => [3, 2.67, 3, 6.33, 3.33],
'marker' => [
'lineWidth' => 2,
'lineColor' => new JsExpression('Highcharts.getOptions().colors[3]'),
'fillColor' => 'white',
],
],*/
[
'type' => 'pie',
'name' => 'Total trucks in pie chart',
'data' => [
[
'name' => 'Jane',
'y' => 13,
'color' => new JsExpression('Highcharts.getOptions().colors[0]'), // Jane's color
],
[
'name' => 'John',
'y' => 23,
'color' => new JsExpression('Highcharts.getOptions().colors[1]'), // John's color
],
[
'name' => 'Joe',
'y' => 19,
'color' => new JsExpression('Highcharts.getOptions().colors[2]'), // Joe's color
],
],
'center' => [100, 80],
'size' => 100,
'showInLegend' => false,
'dataLabels' => [
'enabled' => false,
],
],
],
]
]);
这呈现的数据只是很好,但我想取数据与自定义javascript函数每5秒刷新数据。我该怎么做呢
我有一个自定义函数$this->registerJs('$.getJSON("//www.highcharts.com/samples/data/
jsonp.php?filename=aapl-c.json&callback=?",
myCallbackFunction);');
如何使用返回json的ajax函数更改系列中的数据
我已经检查过了:这个链接,但它不是很有帮助,有人可以指导我前进的道路,或者可能是其他扩展,实现了从ajax请求服务器的数据的yii2图表
你的问题并没有透露出你有多愿意自己做一些试验和错误,或者你是否在为每一个所需的更改寻找完整的代码。如果你需要的是细节,而不是关于所需更改的指导,请告诉我。
希望这能让你到达你想去的地方:
- 将数据创建(代码中数组的系列部分)移动到相关模型中的方法(静态或其他)。
例如,如果你在处理卡车那么你可能会创建public static function getChartData(){
和Truck::getChartData()
该方法将返回一个php数组。例句:
[
'type' => 'column',
'name' => 'Rejected trucks',
'data' => [3, 2, 1, 3, 4],
],
[
'type' => 'column',
'name' => 'Approved trucks',
'data' => [2, 3, 5, 7, 6],
],
可以包含在上面的现有代码中,或者用JSON::encode()
或类似的方法转换,以便在使用ajax请求时每5秒返回一次。
- 在上面的代码中使用你的新方法。所以:
- 获取图表请求每5秒更新一次的数据。
- 你需要在配置中添加一个新的路由来发送上面的ajax请求,然后在相关的控制器中添加一个新的动作,从
Truck::getChartData()
返回json编码的响应,以便重用该方法。
'series' => Truck::getChartData()
您链接到的页面有一个示例,该示例在图表的加载事件上触发,并每5秒发送一次ajax请求。它似乎只更新了第一个系列[0]
,但可以很容易地更新到切换所有系列。这应该很好,除非有一些特定的东西不适合你。