【发布时间】:2015-02-12 14:59:39
【问题描述】:
我正在制作一个网站,以莫里斯图显示 MySQL 数据库中的数据。基本上,我有一个每分钟获取新测量值的数据库,我试图实时显示这些更改,而无需重新加载整个页面。我已经缩短了这个问题的代码,但这基本上是我所拥有的:
PHP 代码:
<?php
while($measurement = mysqli_fetch_array($result)){
$data += $measurement['data'];
}
?>
还有脚本:
function data() {
var ret = [];
ret.push({
y: 'Today',
a: <?php echo $data; ?>
});
return ret;
}
var graph = Morris.Bar({
element: 'graph',
data: data(),
xkey: 'y',
ykeys: ['a'],
labels: ['random label']
});
function update() {
graph.setData(data());
}
setInterval(update, 60000);
然后图表会显示在 id 为“graph”的 div 中。所以问题是更新函数没有用新数据更新图表,因为 $data 没有得到更新。我听说我可以以某种方式创建一个 PHP 函数并使用 Ajax 持续运行它并让它更新我的 $data 变量,但我不知道该怎么做。
为了更新图表,我必须重新加载整个页面,使用每 60 秒刷新一次页面的元标记可以正常工作,但这似乎是一个糟糕的解决方案。
我还尝试将代码放在单独的 PHP 文件中并使用此代码运行:
var auto_updater = setInterval(
(function () {
$("#graph").load("data.php");
}), 60000);
这也可以正常工作,但问题是它会重绘整个图表,这会导致我网站上的滚动条发疯。我想要的是更新 Morris.Bar 中的数据变量,而不是全部。任何帮助将不胜感激。
【问题讨论】:
标签: javascript php jquery ajax