我正在尝试为Google Chart模拟数据库(使用php)。我很难将php与Google Charts连接起来。到目前为止,我已经尝试使用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>
答案 0 :(得分:0)
这部分代码看起来不对:
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将被阻塞,因此在创建图表之前不应该调用成功处理程序。
答案 1 :(得分:0)
有两种方法可以在javascript中处理这个问题。第一个,使用您的代码作为基础,要求您使用JSON.parse
:
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
处理程序:
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);
}
});
}
通常首选第二种方法,但两种方法都有效。