我试图模拟一个数据库(与php)为谷歌图表。我有麻烦的接口php到谷歌图表。到目前为止,我已经尝试使用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>发布于 2014-03-29 12:41:51
这段代码看起来不太对劲:
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将阻塞,因此在创建图表之前不应调用成功处理程序。
发布于 2014-04-01 00:03:07
在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);
}
});
}第二种方法通常是首选的,但这两种方法都可以工作。
https://stackoverflow.com/questions/22723904
复制相似问题