在Google Charts API中包含php脚本

时间:2014-03-28 21:58:26

标签: php json google-visualization

我正在尝试为Google Chart模拟数据库(使用php)。我很难将php与Google Charts连接起来。到目前为止,我已经尝试使用JSON.stringify(),JSON.parse(),...不幸的是,我没有找到包含生成数据的正确方法。我究竟做错了什么?

我编写了以下test.php以自动生成数据:

$fakedate = new DateTime('2014-01-01 14:05:00');
$testTime = $fakedate->format('[H,i,s]');
$testNb = rand ( 1000 , 5000 );

for ($i = 0; $i <= 47; $i++) 
{
    $chartsdata[$i] = array($testTime, $testNb);

    $fakedate->add(new DateInterval('PT10M'));
    $testTime = $fakedate->format('[H,i,s]');
    $testNb = rand ( 1000 , 5000 );
}       
echo json_encode($chartsdata);

另一方面,我写了以下列图:

<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
    google.load("visualization", "1", {packages:["corechart"]});
    google.setOnLoadCallback(drawChart);
    function drawChart() 
    {
        var data = new google.visualization.DataTable();
        data.addColumn('timeofday','testTime');
        data.addColumn('number','testNb');

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

        var obj = JSON.stringify(jsonData);
        data.addRows(obj);

        var options = {
            title:  'Chart title',
        };

        var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
        chart.draw(data, options);
    }

</script>

2 个答案:

答案 0 :(得分:0)

这部分代码看起来不对:

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

您需要设置成功处理程序,而不是将jsonData分配给$ .ajax.responseText(我不认为那里有这样的属性)

它是这样的:

$.ajax({
        url: "test.php",
        dataType: "json",
        async: false,
        success: function(data) {
             jsonData = data; 
        }
    });

由于调用是同步的,因此$ .ajax将被阻塞,因此在创建图表之前不应该调用成功处理程序。

答案 1 :(得分:0)

有两种方法可以在javascript中处理这个问题。第一个,使用您的代码作为基础,要求您使用JSON.parse

function drawChart() {
    var data = new google.visualization.DataTable();
    data.addColumn('timeofday','testTime');
    data.addColumn('number','testNb');

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

    var obj = JSON.parse(jsonData);
    data.addRows(obj);

    var options = {
        title:  'Chart title',
    };

    var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
    chart.draw(data, options);
}

在hrgui的回答中提到的第二个是在AJAX调用中使用success处理程序:

function drawChart() {
    var jsonData = $.ajax({
        url: "test.php",
        dataType: "json",
        success: function (jsonData) {
            var data = new google.visualization.DataTable();
            data.addColumn('timeofday','testTime');
            data.addColumn('number','testNb');
            data.addRows(jsonData);

            var options = {
                title:  'Chart title',
            };

            var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
            chart.draw(data, options);
        }
    });
}

通常首选第二种方法,但两种方法都有效。