【问题标题】:Loading data via `dataLoader` in serial AmCharts does not renders the chart在串行 AmCharts 中通过“数据加载器”加载数据不会呈现图表
【发布时间】:2016-03-10 12:59:27
【问题描述】:

我正在使用 dataLoaderPHP/MySql 后端检索 AmChart 中的数据。 但是生成了简单的serial 条形图,但不知道渲染图形有什么问题,图形没有生成。

然后再次尝试使用 ajax 调用,我通过循环重新解析了JSON 对对象的响应,就像generateChartData() 一样,它是相同的数据。但是仍然没有渲染图表。

这些选项我已经传递给dataLoader

"dataLoader": {
       "url": 'data.php',
       "format": "json"
}

在 ajax 调用中,我调用 chart.validateData() 但这不起作用。有什么办法可以解决这个问题?

为 ajax 请求 false 设置 async 选项会发出警告,但也不起作用。

这里是js代码app.js

var chartData = [];
loadChartData();
function loadChartData() {
var time = new Date();
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function() {
    if (ajax.readyState == 4 && ajax.status == 200) {
        var cur = new Date();
        var data = JSON.parse(ajax.responseText);
        data.forEach(function(d, i) {
            chartData.push({
                date: d.date,
                visits: parseInt(d.visits, 10)
            });
        });
        // alert('Request Completed in '+ (cur - time)+ ' mili seconds');
        console.log(chartData.length);
        // chart.validateData();
    }
};
ajax.open('GET', 'data.php', true);
ajax.setRequestHeader("Content-type", "application/json");
ajax.send();
}

var chart = AmCharts.makeChart("chartdiv", {
"type": "serial",
"theme": "light",
"marginRight": 80,
// "dataLoader": {  
//         "url": "data.php",
//         "format": "json"
// }, this doesn't work too!
"dataProvider": chartData,
"dataDateFormat": "YYYY-MM-DD",
"valueAxes": [{
    "position": "left",
    "title": "Energy Generated"
}],
"graphs": [{
    "id": "g1",
    "fillAlphas": 0.4,
    "valueField": "visits",
    "balloonText": "<div style='margin:5px; font-size:19px;'><b>[[value]]kWh</b></div>"
}],
"chartScrollbar": {
    "graph": "g1",
    "scrollbarHeight": 80,
    "backgroundAlpha": 0,
    "selectedBackgroundAlpha": 0.1,
    "selectedBackgroundColor": "#888888",
    "graphFillAlpha": 0,
    "graphLineAlpha": 0.5,
    "selectedGraphFillAlpha": 0,
    "selectedGraphLineAlpha": 1,
    "autoGridCount": true,
    "color": "#AAAAAA"
},
"chartCursor": {
    "categoryBalloonDateFormat": "JJ:NN, DD MMMM",
    "cursorPosition": "mouse"
},
"categoryField": "date",
"categoryAxis": {
    "minPeriod": "mm",
    "parseDates": true
},
});

// this method is called when chart is first inited as we listen for "dataUpdated" event
function zoomChart() {
// different zoom methods can be used - zoomToIndexes, zoomToDates,     zoomToCategoryValues
   chart.zoomToIndexes( chart.dataProvider.length - 250, chart.dataProvider.length - 100);
}

zoomChart();

这是我的 php 代码data.php

$link = new mysqli( "localhost", "root", "", "test" );
if ( $link->connect_errno ) {
   die ("Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error);
}

// Fetch the data
$query = "SELECT *
          FROM daily_visits
          ORDER BY date ASC";

 $result = $link->query( $query );

// All good?
if ( !$result ) {
     // Nope
     $message  = 'Invalid query: ' . $link->error . "\n";
     $message .= 'Whole query: ' . $query;
    die( $message );
 }

 $data = array();
 while ( $row = $result->fetch_assoc() ) {
     $data[] = $row;
 }

 echo json_encode( $data );
 // Close the connection
 mysqli_close($link);

返回的json 看起来像

[{"date":"2016-09-03","visits":"16"},{"date":"2016-09-03","visits":"49"},...]

【问题讨论】:

  • 请贴出data.php返回的完整代码和数据。否则,我们只能猜测可能出了什么问题。
  • @martynasma 更新了问题
  • @martynasma 终于找到了一个解决方案。我不得不将date 字段的数据类型从DATE 更改为DATETIME,一切正常,但我仍然看到生成了一些不指向任何值的垂直线。我想知道它是否可以删除。
  • 如果您进入 DATETIME 字段,这意味着您的日期现在采用 YYYY-MM-DD HH:NN:SS 格式。您是否相应地更新了您的 dataDateFormat 设置?

标签: javascript php json ajax amcharts


【解决方案1】:

使用数据加载器时,从 makeChart 中删除“dataProvider”:chartData。

【讨论】:

  • 您能否提供更多关于如何解决问题的详细信息?这样一来,您的回答将对阅读此问题的其他人带来更大的好处。
【解决方案2】:

您应该更新图表的实例:

let chartInstance = AmChart.makeCharts(...);
(<any>this.chartInstance).dataProvider = parsedArray; // yes, here we update the dataProvider directly

如果有人不明白,请在这里留言。

【讨论】:

  • 谢谢@Julien Lopez 我的英语不好
猜你喜欢
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多