JSON、PHP、FLOT和jQUERY
基本上,我正在编写一个报告脚本,其中它从数据库中提取数据,并希望使用JSON、jQuery和FLOT将其解析为一个图形 我已经将数据输入到JSON中,图形生成了一半,但它没有填充正确的数据(或任何相关数据) 以下是jQuery代码:JSON、PHP、FLOT和jQUERY,php,javascript,jquery,json,flot,Php,Javascript,Jquery,Json,Flot,基本上,我正在编写一个报告脚本,其中它从数据库中提取数据,并希望使用JSON、jQuery和FLOT将其解析为一个图形 我已经将数据输入到JSON中,图形生成了一半,但它没有填充正确的数据(或任何相关数据) 以下是jQuery代码: $(document).ready(function(){ var options = { legend: { show: false, margin: 10, backgroundOpacity: 0.5
$(document).ready(function(){
var options = {
legend: {
show: false,
margin: 10,
backgroundOpacity: 0.5
},
points: {
show: true,
radius: 3
},
lines: {
show: true
}
};
var plotarea = $("#plotarea");
plotarea.css("height", "250px");
plotarea.css("width", "500px");
$('button[name="getJSON"]').click(function(){
$.ajax({
url: 'reports.php?r=1',
dataType: 'json',
success: function(data){
$.plot( plotarea , data, options );
}
});
});
}))
以下是据我所知正常工作的PHP代码:
$r = addslashes($_GET['r']);
if(!$r){
die('Incorrect Value for \'r\' was set');
}
$sqlQuery = mysql_query(sprintf(
"SELECT DATE_FORMAT(FROM_UNIXTIME(`date_registration`), '%%d-%%m-%%Y') AS `date`, COUNT(1) AS `count`
FROM `crowdcube_users`
WHERE `date_registration` BETWEEN %d AND %d
GROUP BY `date`",
$startDate,
$endDate
));
while($row = mysql_fetch_assoc($sqlQuery)){
$newData[] = array(
'label' => $row['date'],
'data' => array(
$row['date'] => $row['count']
)
);
}
//Encode the array into JSON data
echo json_encode($newData);
以下是JSON数组:
[{"label":"25-07-2011","data":{"25-07-2011":"27"}},{"label":"26-07-2011","data":{"26-07-2011":"27"}},{"label":"27-07-2011","data":{"27-07-2011":"9"}},{"label":"28-07-2011","data":{"28-07-2011":"17"}},{"label":"29-07-2011","data":{"29-07-2011":"18"}},{"label":"30-07-2011","data":{"30-07-2011":"13"}},{"label":"31-07-2011","data":{"31-07-2011":"3"}}]
最后,这是我生成图表时得到的结果:
我做错了什么?任何帮助都将不胜感激
提前谢谢 右起:检查您的数据类型。对于JSON,“27”
与27
不同
问:当我使用JSON数据作为源时,Flot不工作
答:事实上,弗洛特喜欢JSON数据,你只是把格式弄错了。
仔细检查输入的不是数字而是字符串,
比如[[“0”、“-2.13”]、[“5”、“4.3”]。这是最常见的错误,而且
错误可能不会立即显示,因为Javascript可以执行某些操作
自动转换
而且,您的数据结构与Flot所期望的完全不同。具体而言,数据序列应该是数据点列表,每个数据点都是坐标列表:
{data:[[0,-2.13],[5,4.3],.....]}
对于基于时间的数据,您必须使用Javascript时间戳,即从历元开始的毫秒数。在大多数情况下,它只是Unix时间戳乘以1000我刚刚添加了一个typecast,因此它现在是(int)$row['count'],并且仍然是相同的:/