2

我需要帮助。我想使用谷歌的图表 api 和通过 MySql 获得的数据创建一个动态折线图。我正在使用 PHP 来创建页面。我能够创建一个带有硬编码值的简单图表,这没问题。现在我正在尝试使用一些 MySql 数据,但没有运气。我的网页如下所示:

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);

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

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

var options = {'title':'Ticket Sales',
'width':500,
'height':400};

// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
chart.draw(data,options); 
}
</script>
<?
  PrintHeader($buf,$username,$userid,$session);

  echo("<div id='chart_div'></div>");
?>
</html>

然后我的 graphData.php 页面如下所示:

$sql = "SELECT MONTHNAME(DATE_SOLD), COUNT(*) FROM TICKET_SALES WHERE YEAR(DATE_SOLD) = 2012 GROUP BY MONTHNAME(DATE_SOLD) ORDER BY MONTH(DATE_SOLD);";

$result = mysql_query($sql, $conn) or die(mysql_error());

//start the json data in the format Google Chart js/API expects to recieve it
$JSONdata = "{
       \"cols\": [
           {\"label\":\"Month\",\"type\":\"string\"},
           {\"label\":\"Ticket Sales\",\"type\":\"number\"}
         ],
    \"rows\": [";

//loop through the db query result set and put into the chart cell values
while($row = mysql_fetch_row($result)) 
{
   $JSONdata .= "{\"c\":[{\"v\": " . $row[0] . "}, {\"v\": " . $row[1]  ."}]},";
}    

//end the json data/object literal with the correct syntax
$JSONdata .= "]}";

echo $JSONdata;
?>

当我在浏览器中加载页面时,我只看到一个红色框,上面写着“表格没有列”。谁能告诉我我做错了什么?或者也许是更好/更简单的方法?任何帮助将不胜感激!!

4

2 回答 2

2

不要以这种方式构造 JSON 数据,创建一个 PHP 数组并使用 json_encode() 将数据发回。

<?php

$sql = "SELECT MONTHNAME(DATE_SOLD), COUNT(*) FROM TICKET_SALES WHERE YEAR(DATE_SOLD) = 2012 GROUP BY MONTHNAME(DATE_SOLD) ORDER BY MONTH(DATE_SOLD);";

$result = mysql_query($sql, $conn) or die(mysql_error());

//start the json data in the format Google Chart js/API expects to recieve it
$data = array('cols' => array(array('label' => 'Month', 'type' => 'string'),
                              array('label' => 'Ticket Sales', 'type' => 'string')),
              'rows' => array());

while($row = mysql_fetch_row($result)) {
   $data['rows'][] = array('c' => array(array('v' => $row[0]), array('v' => $row[1])));
}    

echo json_encode($data);

我没有检查 JSON 输出是否是想要的,只是使它与您尝试生成的相同。此外,您应该让 die() 在 JSON 对象中返回无效状态,这样您就可以判断它失败了。

于 2012-10-24T17:03:21.217 回答
2

是的,使用该json_encode功能。它将为您省去很多麻烦。我还要确保你通过一个intval()或什么来运行你的数字。

我使用 Google 图表 API 的经验是,如果您在引号中发送一个数字,图表将无法绘制,因此您的 PHP 数组中的数据类型必须正确,因此json_encode结果在语法上是正确的。

于 2012-10-24T17:06:40.573 回答