首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Google Charts API中包含php脚本

在Google Charts API中包含php脚本
EN

Stack Overflow用户
提问于 2014-03-29 05:58:26
回答 2查看 135关注 0票数 1

我试图模拟一个数据库(与php)为谷歌图表。我有麻烦的接口php到谷歌图表。到目前为止,我已经尝试使用JSON.stringify()、JSON.parse()、...不幸的是,我没有找到一种适当的方法来包含生成的数据。我做错了什么?

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

代码语言:javascript
复制
$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);

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

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2014-03-29 12:41:51

这段代码看起来不太对劲:

代码语言:javascript
复制
var jsonData = $.ajax({
        url: "test.php",
        dataType: "json",
        async: false
    }).responseText;

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

应该是这样的:

代码语言:javascript
复制
$.ajax({
        url: "test.php",
        dataType: "json",
        async: false,
        success: function(data) {
             jsonData = data; 
        }
    });

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

票数 0
EN

Stack Overflow用户

发布于 2014-04-01 00:03:07

在javascript中有两种方法来处理这个问题。首先,使用您的代码作为基础,需要使用JSON.parse

代码语言:javascript
复制
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处理程序:

代码语言:javascript
复制
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);
        }
    });
}

第二种方法通常是首选的,但这两种方法都可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22723904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档