我今天开始学习如何使用谷歌图表,我有点卡住了.
我有动态数据(每天更改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] 举报,一经查实,本站将立刻删除。