javascript - 更改 PHP 变量后 Highcharts 实时数据未更新

标签 javascript php json csv highcharts

我在页面index.html上有一个实时更新的highchart,它调用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 脚本将“行”存储为 session 变量,以便每次调用脚本时,它都会解析 CSV 文件的下一行。 CSV 文件有两列,一列表示“hi”,一列表示“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 输出,并且显示的是正确的值取决于按下的按钮。但是,由于保留了标题代码,图表在按下后就会停止。

任何帮助将不胜感激!

谢谢, 凯文

最佳答案

您的方法有些错误。您似乎尝试实现动态图表刷新,为此您需要:

  1. 在按钮点击时进行 ajax 调用
  2. 将参数传递给函数(本例中为第 no 行。可以作为状态变量存储在 javascript 中)
  3. 编写一个函数,从图表中删除之前的数据/点并添加新点。

这应该是我通常遵循的图表和动态数据推送方法。

关于javascript - 更改 PHP 变量后 Highcharts 实时数据未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31293296/

相关文章:

javascript - AngularJS w/Flask 后端,表示从后端传递的数据

javascript - jQuery 中 $ ("p + p") 的反义词是什么?

javascript - 如何使用 JavaScript 向 HTML 元素添加/更新属性?

javascript - 使用 angular.js 选择输入复选框时如何获取表的行数据

javascript - 有没有JavaScript静态分析工具?

php - 我可以在 JavaScript 中使用 PHP 值吗?

php - 有没有办法按时间表恢复 MySQL 数据库

php - 如何使用php与Youtube Api v3赞YouTube视频

jquery - 将外部 JSON 文件读入动态 HTML 表

java - 我有一个 json 字符串,但无法提取特定字段