所以基本上你想在服務器端寫入一些值的時候更新圖表,對嗎?正如我的評論中所提到的,在您的JS塊中使用PHP語句將不起作用,因爲PHP代碼將在頁面加載時運行,並且之後不會更改。相反,你應該用一個兩步走的方法:
JS代碼PHP頁面(使用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);
檢查WH ICH行已經寫在給定的時間跨度(假設你的表,你正確記錄到有timestamp),並通過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部分(它處理存儲○腳本內部˚F新值):
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腳本輪詢更改,就會返回一次更改,然後重置更改列表以避免兩次返回相同的值。
這段代碼對我沒有任何意義:你應該知道PHP部分一旦被創建就執行並回顯出來,所以'$ new'元素永遠不會通過PHP進行更新。 'if()。change()'塊會立即被觸發,因爲它會觸發change事件,然後執行內部代碼。你正在定義一個名爲'check()'的函數,但是在你的發佈代碼中你並沒有執行它。 – SaschaM78
是的,我在'.change()'函數中遇到了問題,但是我怎麼才能使用這個語句,當'$ new'值是變化時,這意味着num_rows增加,那麼UpdateChart函數就會執行。 – Lakshya
我仍然不確定我是否正確地得到了你,但我會給你一個有希望的答案。 – SaschaM78