这是否可能如果 $ new 的值被更改,则var updateChart函数再次重新加载,然后再次转到 var check function < / strong>并且再次具有相同的条件。
var updateInterval = 3000;
var updateChart = function() {
var check = function() {
if(<?php echo $new; ?>).change(function(){
setInterval(function(){updateChart()}, 1000);
});
}
dps.push(<?php echo $str; ?>);
chart.render();
};
将不胜感激 感谢。
答案 0 :(得分:1)
所以基本上你想在服务器端写入一些值后立即更新图表,对吧?正如我的评论中所提到的,在JS块中使用PHP语句将不起作用,因为PHP代码将在页面加载时运行,之后不会更改。相反,您应该使用两步法:
JS代码(使用Jquery):
window.setInterval(function() {
$.ajax('change-listener.php', {
success: function(data) {
if (data.changed) {
for(var i in data.newValue) {
dps.push(data.newValue[i]);
}
chart.render();
}
}
});
}, 3000);
检查在给定时间范围内写入的行(假设您正确记录的表具有时间戳)并通过JSON将相应的值返回给JS脚本:
PHP代码:
$query= 'SELECT strValue FROM [YOURTABLE] WHERE created > DATE_SUB(now(),INTERVAL 3 SECOND)';
$data= array();
if ($result = $mysqli->query($query)) {
if (mysqli_num_rows($result)) {
$data['changed']= TRUE;
while($obj = $result->fetch_object()){
$data['newValues'][]= $obj->strValue;
}
} else {
$data['changed']= FALSE;
}
}
$result->close();
header('Content-Type: application/json');
print json_encode($data);
另一种方法是将新创建的值存储在用户会话中:
PHP代码,第1部分(在处理新值存储的脚本中):
session_start();
$_SESSION['newValues'][]= $str;
PHP代码,第2部分(而不是轮询数据库,轮询会话):
session_start();
if (isset($_SESSION['newValues'])) {
$data['changed']= TRUE;
$data['newValues']) $_SESSION['newValues'];
unset($_SESSION['newValues'];
} else {
$data['changed']= FALSE;
}
第二种方法是纯粹的单用户场景:只要PHP脚本轮询更改,就会返回一次更改,然后重置更改列表,永远不会返回相同的值两次。