不斷需要刷新數據在我看來,就像使用SSE的理想候選人,就像我在評論中提到的那樣。這個想法是你有一個PHP腳本(gas_sse.php
),一旦你的javascript頁面初始化一個連接,就開始工作在一個無限循環中。無限循環有一個sleep
調用,並且在規定的時間段內不會執行任何操作(5s
) - 在循環內部,您將查詢數據庫以獲取最新信息(並且您可能要編輯sql以便它不返回每次迭代時更大的記錄集,如果數據庫每5秒鐘更新一次新行)
查詢運行後,您可以在將消息發送到JavaScript偵聽器並在客戶端處理它之前處理記錄集你覺得合適。
以下是基本思想的一個未經測試的例子 - 如果有錯誤(並且通常會有,如果沒有測試),那麼我表示歉意。
<?php
/*
gas_sse.php
*/
set_time_limit(0);
ini_set('auto_detect_line_endings', 1);
ini_set('mysql.connect_timeout','7200');
ini_set('max_execution_time', '0');
/* -- Edit to suit your location -- */
date_default_timezone_set('Europe/London');
ob_end_clean();
gc_enable();
/* -- set headers -- */
header('Content-Type: text/event-stream'); /* !important! */
header('Cache-Control: no-cache');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET');
header('Access-Control-Expose-Headers: X-Events');
/* -- utility function to send formatted sse message -- */
if(!function_exists('sse_message')){
function sse_message($evtname='gas', $data=null, $retry=1000){
if(!is_null($data)){
echo "event:".$evtname."\r\n";
echo "retry:".$retry."\r\n";
echo "data:" . json_encode($data, JSON_FORCE_OBJECT|JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS);
echo "\r\n\r\n";
}
}
}
/* -- How often to send messages -- */
$sleep=5;
/* You should use mysqli or PDO instead!!! */
$con = mysql_connect("localhost", "shsas", "");
mysql_select_db("shsas", $con);
while(true){
if(connection_status() != CONNECTION_NORMAL or connection_aborted()) {
break;
}
/* Infinite loop is running - perform actions you need */
/* -- Query database -- */
$sql='select `Gaslevel` from`gas` order by `id` desc limit 100;';
$res=mysql_query($sql);
$payload=array();
while($rs=mysql_fetch_assoc($res)){
$payload[]=$rs;
}
/* -- prepare sse message -- */
sse_message('gas', $payload);
/* -- Send output -- */
if(@ob_get_level() > 0) for($i=0; $i < @ob_get_level(); $i++) @ob_flush();
@flush();
/* wait */
sleep($sleep);
}
if(@ob_get_level() > 0) {
for($i=0; $i < @ob_get_level(); $i++) @ob_flush();
@ob_end_clean();
}
?>
這初始化上交所腳本的總體思路是沿着這些線路的連接你的HTML頁面上:
<script type='text/javascript'>
var evtSource = new EventSource("gas_sse.php");
evtSource.onmessage = function(e) {
var json=JSON.parse(e.data);
/* do stuff with json data */
}
</script>
使用'AJAX'。就目前而言,您是混合代碼('PHP'&'JavaScript'),它的語法不正確。 – Script47
你***應該從'mysql_ *'切換,因爲它已經[官方](http://php.net/manual/en/migration55.deprecated.php)已棄用。使用['mysqli_ *'](http://php.net/manual/en/book.mysqli.php)或[PDO](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)** ** [準備語句(http://php.net/manual/en/pdo.prepared-statements.php)。 – Script47
你能告訴我如何做到這一點與我的代碼我真的很新這個PHP –