0

我正在尝试使用 Ajax 加载 Google Chart,由于某种原因,传回的数据说它不是数组。

这是我希望图表显示的页面上的 Javascript:

<script>
    google.load("visualization", "1", {packages:["corechart"]});
    google.setOnLoadCallback(drawCharts);

    function drawCharts(){

        // Each chart function

        $.get('charts_ajax.php',{a : 'usage'}, function(data){

            if(data){
                initGoogleChart(data)
            }
        });
    }

    function initGoogleChart(data){
        var tableData = google.visualization.arrayToDataTable(data);

        var options = {
            title: 'My Daily Activities'
        };

        var chart = new google.visualization.PieChart(document.getElementById('terms-table'));
        chart.draw(tableData, options);

    }

</script>

在charts_ajax.php 文件中有这样的内容:

if ($_GET['a'] == "usage") {

   $arrTableData = array([
       ['Task', 'Hours per Day'],
       ['Work',     11],
       ['Eat',      2],
       ['Commute',  2],
       ['Watch TV', 2],
       ['Sleep',    7]
   ]);

    echo $arrTableData;
}

当我 console.log($arrTableData) 我得到:

 array(1) {
  [0]=>
   array(6) {
      [0]=>
     array(2) {
      [0]=>
      string(4) "Task"
      [1]=>
      string(13) "Hours per Day"

 // etc etc.. 

那么你能告诉我为什么它说没有数组以及为什么它不起作用吗?

4

3 回答 3

4

像这样更新你的 php 函数:

if ($_GET['a'] == "usage") {

    $arrTableData = array(
        array('Task',     'Hours per Day'),
        array('Work',     11),
        array('Eat',      2),
        array('Commute',  2),
        array('Watch TV', 2),
        array('Sleep',    7)
    );

    echo json_encode($arrTableData);
}

在你的 javascript 函数中试试这个:

function initGoogleChart(data) {

    var tableData = google.visualization.arrayToDataTable(JSON.parse(data));

    ...

}
于 2013-10-30T16:20:19.350 回答
1

您需要json_encode在 PHP 中使用函数:

echo json_encode($arrTableData);
于 2013-10-30T16:20:30.627 回答
0

您需要结合其他两个答案。用于echo json_encode($arrTableData);将数组输出为 JSON 编码的字符串,并用于var tableData = google.visualization.arrayToDataTable(JSON.parse(data));将 JSON 解码为 javascript 数组。

于 2013-10-30T16:58:37.350 回答