Php Google图表API折线图上的JSON字符串无效
我正在尝试使用GoogleCharts API创建一个基于MySQL数据库的折线图。数据库包含温度和时间戳 我使用getData.php获取数据并将其转换为JSONPhp Google图表API折线图上的JSON字符串无效,php,mysql,json,datetime,google-visualization,Php,Mysql,Json,Datetime,Google Visualization,我正在尝试使用GoogleCharts API创建一个基于MySQL数据库的折线图。数据库包含温度和时间戳 我使用getData.php获取数据并将其转换为JSON <?php $servername = "xxx"; $username = "xxx"; $password = "xxx"; $dbname = "xxx"; $conn = mysqli_connect($servername, $username, $password, $dbname); // Check co
<?php
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$qry = "SELECT * FROM temp";
$result = mysqli_query($conn,$qry);
$table = array();
$table['cols'] = array(
array('label' => 'Time', 'type' => 'datetime'),
array('label' => 'Temperature', 'type' => 'number')
);
$rows = array();
foreach($result as $row){
$temp = array();
//$temp[] = array('v' => 'Date(' . $row['time'] . ')'); OLD
//turn timestamps into correct datetime form Date(Y,n,d,H,i,s)
$temp[] = array('v' => 'Date('.date('Y',strtotime($row['time'])).',' .
(date('n',strtotime($row['time'])) - 1).','.
date('d',strtotime($row['time'])).','.
date('H',strtotime($row['time'])).','.
date('i',strtotime($row['time'])).','.
date('s',strtotime($row['time'])).')');
$temp[] = array('v' => (float) $row['temperature']);
$rows[] = array('c' => $temp);
}
$table['rows'] = $rows;
$jsonTable = json_encode($table, true);
echo $jsonTable;
?>
我在这里完全不知所措。JSON字符串应该很好,它也经过了jsonlint.com的验证。非常感谢您的帮助。复制您的代码并在getData.php中返回粘贴的json字符串,我无法重现您的错误 请检查main.html中的ajax响应:
console.log(jsonData);
如果我在getData.php中添加额外的输出(例如var_dump something),我可以创建无效的JSON字符串错误。
<body>
但是,JSON字符串周围的标记是可疑的,因为在错误消息中打印了格式错误的JSON字符串,因此标记似乎是JSON字符串的一部分。getData.php中的php代码是否嵌入到body标记中
在main.html中,您可以尝试:
jsonData=jsonData.replace("<body>", "").replace("</body>", "");
jsonData=jsonData.replace(“,”).replace(“,”);
检查,如果这可能是问题。复制代码并在getData.php中返回粘贴的json字符串,我无法重现您的错误 请检查main.html中的ajax响应:
console.log(jsonData);
如果我在getData.php中添加额外的输出(例如var_dump something),我可以创建无效的JSON字符串错误。
<body>
但是,JSON字符串周围的标记是可疑的,因为在错误消息中打印了格式错误的JSON字符串,因此标记似乎是JSON字符串的一部分。getData.php中的php代码是否嵌入到body标记中
在main.html中,您可以尝试:
jsonData=jsonData.replace("<body>", "").replace("</body>", "");
jsonData=jsonData.replace(“,”).replace(“,”);
要检查,这是否可能是问题。关于删除的注释:数据点非常接近,轴标签没有那么有用。您可以编辑格式:var options={'title':'Temperature','width':720','height':480,'hAxis':{'format':'dd/MM/yyyy HH:MM'};再次感谢,我自己找到了,无法编辑评论,所以决定删除它。答案是从getData.php中删除标记。非常感谢你的回答。我现在在想,怎样才能得到图表中每个点上X轴上的时间戳。这是一张图表。目前的数字只是为了测试。这似乎是连续图表的一个问题。如果水平轴不需要根据时间进行缩放,那么可以通过从datetime类型切换到string并将时间戳格式化为string来切换到离散图表。否则我不知道解决方案,可能会提出另一个问题?关于您删除的注释:数据点非常接近,轴标签没有那么有用。您可以编辑格式:var options={'title':'Temperature','width':720','height':480,'hAxis':{'format':'dd/MM/yyyy HH:MM'};再次感谢,我自己找到了,无法编辑评论,所以决定删除它。答案是从getData.php中删除标记。非常感谢你的回答。我现在在想,怎样才能得到图表中每个点上X轴上的时间戳。这是一张图表。目前的数字只是为了测试。这似乎是连续图表的一个问题。如果水平轴不需要根据时间进行缩放,那么可以通过从datetime类型切换到string并将时间戳格式化为string来切换到离散图表。否则我就不知道解决办法了,也许可以问另一个问题?