谷歌图表API和自动刷新json数据中的多个仪表


Google Charts API and auto-refresh multiple gauges from json data

我正在努力寻找如何通过 ajax 让多个仪表"自动更新"的解决方案。 我希望会出现 3 个仪表(仪表 1、仪表 2 和仪表 3(,根据文档,每个仪表都是具有单个数值的列。 我已经从这个网站看过PHP MySQL Google Chart JSON - 完整示例,并阅读了谷歌文档,但没有一个真正帮助我解决这里发生的事情。 我没有在数据变量中获取任何内容,并且除了"数据表未设置"之外,我没有收到任何错误消息。 代码如下:

      google.charts.load('current', {'packages':['gauge']});
      google.charts.setOnLoadCallback(drawChart);
    function drawChart() {
    var data;
    var options = {
        width: 600,
        height: 190,
        redFrom: 7,
        redTo: 10,
        greenFrom: 0,
        greenTo: 5,
        yellowFrom: 5,
        yellowTo: 7,
        minorTicks: 0,
        min: 0,
        max: 10,
        majorTicks: ["",""],
        animation: {
            duration: 100
        }
    };
    var chart = new google.visualization.Gauge(document.getElementById('gaugediv'));
    function refreshData () {
        //alert("refreshing");
        var json = $.ajax({
            url: 'data.php', 
            dataType: 'json',
            async: false
        }).responseText;
        alert(json); //shows good data
        data = google.visualization.DataTable(json);
        alert("did I make it here?");  // nope. Doesn't alert.   
        chart.draw(data, options);
        //setInterval(refreshData, 3000);
    }
    refreshData();
    //setInterval(refreshData, 3000);
}

这是我从数据中得到的.php

{
  cols: [{id: 'A', label: 'Gauge1', type: 'number'},
         {id: 'B', label: 'Gauge2', type: 'number'},
         {id: 'C', label: 'Gauge3', type: 'number'}
  ],
  rows: [{c:[{v: '8'},
             {v: '6'},
             {v: '4'}
        ]}
  ]
}";

任何帮助将不胜感激。

尝试

创建DataTable
时缺少new关键字其他一切看起来都不错...

data = new google.visualization.DataTable(json);

google.charts.load('current', {
  packages: ['gauge'],
  callback: drawChart
});
function drawChart() {
  var json = {
    cols: [
      {id: 'A', label: 'Gauge1', type: 'number'},
      {id: 'B', label: 'Gauge2', type: 'number'},
      {id: 'C', label: 'Gauge3', type: 'number'}
    ],
    rows: [
      {c:[
        {v: '8'},
        {v: '6'},
        {v: '4'}
      ]}
    ]
  };
  // be sure to use the 'new' keyword here...
  var data = new google.visualization.DataTable(json);
  var chart = new google.visualization.Gauge(document.getElementById('gaugediv'));
  var options = {
    width: 600,
    height: 190,
    redFrom: 7,
    redTo: 10,
    greenFrom: 0,
    greenTo: 5,
    yellowFrom: 5,
    yellowTo: 7,
    minorTicks: 0,
    min: 0,
    max: 10,
    majorTicks: ["",""],
    animation: {
      duration: 100
    }
  };
  chart.draw(data, options);
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="gaugediv"></div>