我在页面上有一个实时更新高亮图,index.html,调用php脚本datatest.php来解析CSV文件,将结果输出为json并将其作为新点添加图表:
$.ajax({
url: 'datatest.php',
success: function(point) {
var series = chart.series[0],
shift = series.data.length > 20; // shift if the series is longer than 20
// add the point
chart.series[0].addPoint(eval(point), true, shift);
// call it again after one second
setTimeout(requestData, 1000);
},
cache: false
});
基本的PHP脚本存储"行"作为会话变量,以便每次调用脚本时,它都会解析CSV文件的下一行。 CSV文件有两列,一列用于" hi"和#34; lo"。
我尝试在页面中添加几个按钮,以便我可以动态更改php脚本返回的CSV文件列。这些按钮的代码如下:
<form method="post" action ="datatest.php">
<input type="submit" name="HighWind" value="hi"/>
<input type="submit" name="LowWind" value="lo"/>
</form>
图表运行完美,并使用默认(低)值更新,但是当我按下上述任一按钮时,图表就会停止。这是我的PHP代码:
<?php
$i = 0;
session_start();
$_SESSION['line'] = isset($_SESSION['line']) ? ++$_SESSION['line'] : 0;
$_SESSION['hiorlo'] = isset($_SESSION['hiorlo']) ? $_SESSION['hiorlo'] : "lo";
$handle = fopen('WindSpeed.csv', 'r');
while(($windVals = fgetcsv($handle, 1000, ',')) && $i <= $_SESSION['line']) {
$i++;
}
if(!$windVals) {
$_SESSION['line'] = 0;
}
header("Content-type: text/json");
$x = time() * 1000;
$_SESSION['hiorlo'] = isset($_POST["HighWind"]) ? $_POST["HighWind"] : "Low";
//$hiorlo POST Code
if ($_SESSION['hiorlo'] == "hi") {
$y = (float)$windVals[0];
} else {
$y = (float)$windVals[1];
}
// Create a PHP array and echo it as JSON
$ret = array($x, $y);
echo json_encode($ret);
header("Location: index.html"); // Return to frontend (index.html)
?>
有趣的是,当我注释掉header("Location: index.html")
时,我按预期重定向到PHP脚本的json输出,这显示了正确的值,具体取决于按下了哪个按钮。但是,如果留下标题代码,则图表会在按下后停止。
非常感谢任何帮助!
谢谢, 凯文
答案 0 :(得分:1)
您的方法有点不对。您似乎尝试实现动态图表刷新,因为您需要:
这应该是我通常遵循的图表和动态数据推送的方法。