Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在GoogleCharts API中包含php脚本_Php_Json_Google Visualization - Fatal编程技术网

在GoogleCharts API中包含php脚本

在GoogleCharts API中包含php脚本,php,json,google-visualization,Php,Json,Google Visualization,我正在尝试用php模拟一个数据库,用于谷歌图表。我很难将php连接到Google图表。到目前为止,我已经尝试使用JSON.stringify、JSON.parse,。。。不幸的是,我没有找到合适的方法来包含生成的数据。我做错了什么 为了自动生成数据,我编写了以下test.php: $fakedate = new DateTime('2014-01-01 14:05:00'); $testTime = $fakedate->format('[H,i,s]'); $testNb = rand

我正在尝试用php模拟一个数据库,用于谷歌图表。我很难将php连接到Google图表。到目前为止,我已经尝试使用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>

这段代码似乎不正确:

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将被阻塞,因此在创建图表之前不应调用成功处理程序。

在javascript中有两种方法来处理此问题。首先,以代码为基础,需要使用JSON.parse:

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

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);
        }
    });
}
第二种方法通常是首选的,但两者都可以

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);
        }
    });
}