Google.visualization.dashboard不使用json数组php呈现

问题描述 投票:1回答:1

我正在通过MYSQL查询传递编码的json数组,以呈现google.visualization.dashboard。我几乎可以肯定问题出在我的数组上,但是我找不到位置。当我直接绘制Google图表(例如google.visualization.PieChart)时,代码有效,但当我使用仪表板/控件包装器/图表包装器类时,该代码无效。

这使我相信问题出在我的数组结构上,还是google.visualization.dashboard要求数据表的填充方式与图表不同。

PHP代码(loadpiechart.php):

$table['cols'] = array(
    array('label' => 'NZ Crime', 'type' => 'string'),
    array('label' => 'Value', 'type' => 'number'),
);

$rows=array();
while($r=mysqli_fetch_assoc($res)){
    $temp=array();
    $temp[]=array('v'=> $r['Offence']);
    $temp[]=array('v' => $r['Total']);
    $rows[]=array('c' => $temp);
}
$table['rows'] = $rows;
$jsonTable = json_encode($table, JSON_NUMERIC_CHECK);
echo $jsonTable;

哪个给我以下数组[]

{"cols":[{"id":"A","label":"NZ Crime","type":"string"},{"id":"B","label":"Value","type":"number"}],"rows":[{"c":[{"v":" Acts intended to cause injury"},{"v":97}]},{"c":[{"v":" Sexual assault and related offences"},{"v":44515}]},{"c":[{"v":" Dangerous or negligent acts endangering persons"},{"v":3016}]},{"c":[{"v":" Abduction, harassment and other related offences against a person"},{"v":859}]},{"c":[{"v":" Robbery, extortion and related offences"},{"v":14157}]},{"c":[{"v":" Unlawful entry with intent\/burglary, break and enter"},{"v":2641}]},{"c":[{"v":" Theft and related offences"},{"v":59323}]},{"c":[{"v":" Fraud, deception and related offences"},{"v":136932}]},{"c":[{"v":" Illicit drug offences"},{"v":9726}]},{"c":[{"v":" Prohibited and regulated weapons and explosives offences"},{"v":22994}]},{"c":[{"v":" Property damage and environmental pollution"},{"v":7074}]},{"c":[{"v":" Public order offences"},{"v":58483}]},{"c":[{"v":" Offences against justice procedures, government security and government operations"},{"v":46105}]},{"c":[{"v":" Miscellaneous offences"},{"v":19084}]}]}

最后是HTML代码。

html>
  <head>           
    <!--Load the AJAX API-->
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">

    // Load the Visualization API and the piechart package.
      google.charts.load('current', {packages:['corechart', 'table', 'controls']});

    // Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback(drawTable);

    function drawTable() {
         var jsonData = $.ajax({
             url: "loadpiechart.php",
             dataType:"json",
             async: false
             }).responseText;

         // Create our data table out of JSON data loaded from server.
         var data = new google.visualization.DataTable(jsonData);

      var table = new google.visualization.ChartWrapper({
          'chartType': 'Table',  
          'containerId': 'table_div',
      });

      var chart = new google.visualization.ChartWrapper({
         'chartType': 'PieChart',  
          'containerId': 'chart_div',
          'view': {'columns': [0, 1]},
           });

      var control = new google.visualization.ControlWrapper({
            'controlType': 'CategoryFilter',
            'containerId': 'control_div',
            'options': {
                'filterColumnIndex': 0,
            }
      });

      var dashboard = new google.visualization.Dashboard(
                document.getElementById('dashboard_div'));
      dashboard.bind([control], [table,chart]);
      dashboard.draw(data);
    }
    </script>
  </head>
 <body>
<div id="dashboard_div" style="border: 1px solid #ccc; margin-top: 1em">
  <p style="padding-left: 1em"><strong>NZ Crime Stats</strong></p>
  <table class="columns">
    <tr>
      <td>
        <div id="control_div" style="padding-left: 15px"></div>
      </td>
    </tr><tr>
      <td>
        <div id="chart_div" style="padding-top: 15px"></div>
      </td><td>
        <div id="table_div" style="padding-top: 30px"></div>
      </td>
    </tr>
  </table>
</div>  
  </body>
</html>
php mysql arrays json google-visualization
1个回答
0
投票

我建议将AJAX调用更改为非阻塞异步调用,并在success()方法中调用绘图例程:

function drawTable() {

  $.ajax("https://gist.githubusercontent.com/Moonbird-IT/da4c7d76a69eb250478bb55b5d2360f5/raw/9dbf9d92981a3c9b71906dd3a680a2cdeca7c4aa/googlecharts.json", {
    dataType: "json",
    success: function(jsonData) {

      // Create our data table out of JSON data loaded from server.
      var data = new google.visualization.DataTable(jsonData);
      ...
    }
  });
}

我更新了您的代码以使用更改后的建议,here是其中的有效小提琴。

© www.soinside.com 2019 - 2024. All rights reserved.