Возможно ли это, если значение $ новый меняется тогда вар функция updateChart перезагрузите снова, а затем снова идет к функция проверки вар и снова имейте то же самое условие на этом.
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();
};
Будет оценено
Благодарю.
Итак, в основном вы хотите обновить диаграмму, как только на стороне сервера будет записано какое-то значение, верно? Как упоминалось в моем комментарии, использование операторов PHP в вашем блоке JS не будет работать, так как код 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-скрипт запрашивает изменения, изменения возвращаются один раз, а затем список изменений сбрасывается, чтобы никогда не возвращать одинаковые значения дважды.
Других решений пока нет …