微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 表没有列 – Google Charts – PHP AJAX

我今天开始学习如何使用谷歌图表,我有点卡住了.

我有动态数据(每天更改3-4次)以泵入图表(饼图).我使用AJAX作为数据源,PHP作为我的后端..我试着这样做,但无济于事:

AJAX:

<?PHP
include $_SERVER['DOCUMENT_ROOT'].'/includes/galaxy-connect.PHP';

$database = new Connection();
$database = $database->Connect();
$statement = $database->Prepare(" SELECT COUNT(Membership_Level_Name) AS MemTotal,Membership_Level_Name
FROM membership AS M
LEFT JOIN membership_levels AS L
ON M.`Membership_Level_Id` = L.`Membership_Level_Id`
LEFT JOIN membership_status AS S
ON M.`MembershipStatusId` = S.MembershipStatusId
WHERE M.`MembershipStatusId` = 1
GROUP BY L.`Membership_Level_Name`
ORDER BY L.`Membership_Level_Id` ");

$statement->execute();
$MembershipTotals = $statement->fetchall(PDO::FETCH_ASSOC); 

if (!empty($MembershipTotals)) {
    foreach ($MembershipTotals as $MembershipTotal) {
        $data[] = array(
            "cols" => array("id"=>"Membership_Level_Name","label"=>"Membership Level","type"=>"varchar"),array("id"=>"MemTotal","label"=>"Total","pattern"=>"","type"=>"number"),"rows" => array($MembershipTotal['Membership_Level_Name'],$MembershipTotal['MemTotal'])
        );
    }
}

echo json_encode($data);

这就是我的ajax,它产生:

(好的,不会让我发布一张图片,但会发现结果)

[{"cols":{"id":"Membership_Level_Name","label":"Membership Level","type":"varchar"},"0":{"id":"MemTotal","label":"Total","pattern":"","type":"number"},"rows":["Start Up","24"]},{"cols":{"id":"Membership_Level_Name","rows":["Member","131"]},"rows":["Member Plus","170"]},"rows":["Premier Member","31"]},"rows":["bronze","97"]},"rows":["Silver","145"]},"rows":["Gold","188"]},"rows":["Affiliate","3"]},"rows":["Charity\/Education","4"]}]

所以下一步是调用那些数据,我从谷歌图表“连接数据库”(或类似的东西)页面获取代码

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">

    // Load the Visualization API and the piechart package.
    google.load('visualization','1',{'packages':['corechart']});

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

    function drawChart() {
      var jsonData = $.ajax({
          url: "/ajax/charts/membershiptotals.PHP",dataType:"json",async: false
          }).responseText;

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

      // Instantiate and draw our chart,passing in some options.
      var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
      chart.draw(data,{width: 400,height: 240});
    }


    </script>

重新加载网页,它会产生错误

表没有列

我不明白为什么虽然..我看了其他的解决方案并发布在Quora和谷歌集团的API但无济于事..有人能告诉我代码有什么问题吗?

解决方法

我找到了答案:

AJAX改为:

<?PHP

    include $_SERVER['DOCUMENT_ROOT'].'/includes/galaxy-connect.PHP';

    $database = new Connection();
    $database = $database->Connect();
    $statement = $database->Prepare(" SELECT COUNT(Membership_Level_Name) AS MemTotal,Membership_Level_Name
                FROM membership AS M
                LEFT JOIN membership_levels AS L
                                ON M.`Membership_Level_Id` = L.`Membership_Level_Id`
                LEFT JOIN membership_status AS S
                                                                                                                        ON M.`MembershipStatusId` = S.MembershipStatusId
                                                                                                                        WHERE M.`MembershipStatusId` = 1
                                GROUP BY L.`Membership_Level_Name`
        ORDER BY L.`Membership_Level_Id` ");
    $statement->execute();
    $MembershipTotals = $statement->fetchall(PDO::FETCH_OBJ);   


    $col1=array();
    $col1["id"]="";
    $col1["label"]="Membership Type";
    $col1["pattern"]="";
    $col1["type"]="string";

    $col2=array();
    $col2["id"]="";
    $col2["label"]="Total";
    $col2["pattern"]="";
    $col2["type"]="number";

    $cols = array($col1,$col2);

    $rows=array();

        foreach ($MembershipTotals AS $MembershipTotal) {  //foreach ($Event->TrainingTotals['ConfirmedTotal'] AS $Key => $Value) {
            $cell0["v"]=$MembershipTotal->Membership_Level_Name;
            $cell1["v"]=intval($MembershipTotal->MemTotal);

        $row0["c"]=array($cell0,$cell1);
        array_push($rows,$row0);
        }

    $data=array("cols"=>$cols,"rows"=>$rows);
    echo json_encode($data);

这使得它更容易,然后在实际页面上:

<script type="text/javascript">
    // Load the Visualization API and the piechart package.
    google.load('visualization',{'packages':['corechart']});

    // Set a callback to run when the Google Visualization API is loaded.
    google.setonLoadCallback(drawChart);
    function drawChart() {
        var jsonData = $.ajax({
            url: "/ajax/charts/membershiptotals.PHP",async: false
        }).responseText;

    // Create our data table out of JSON data loaded from server.
    var data = new google.visualization.DataTable(jsonData);
    var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
        chart.draw(data,{title:'Membership Bookings',width: 800,height: 500});
    }


</script>

基本上我必须清楚地声明列,并且intval是将它变成一个整数,否则它返回数字作为一个谷歌不喜欢的字符串..希望这有助于任何人:)

感谢Harish的答案,但我需要它更有活力:-)

@H_502_62@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐