輪詢
polling.php 詢問的主頁面
當你想要一直問有沒有人回訊息
隨便放個DIV顯示資訊
<div id="state"></div>
javascript 部分
$(function () {
'use strict';
(function Polling() {var con=1; //第幾次囉
$.ajax({
url: "test.php",
data: {"timed": new Date().getTime(),'id':'2'}, // 參數自己設定
type:'GET', // GET 去
dataType: "json", // 收 JSON
timeout: 10000, // 設多久超時
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#state").append("error<br/>");
if (textStatus == "timeout") { // 請求超時
Polling(); // 遞迴調用
} else { // 其他錯誤
Polling();
}
console.log('error');
},
success: function (data, textStatus) {
console.log(data);
$("#state").append("get<br/>");
if (textStatus == "success" && data['success']==1) { // 請求成功
$("#state").append(data['text']+"BINGO!<br/>");
}else{ // 重新請求
Polling();
}
},
beforeSend: function(){
var now = new Date();
// 紀錄發送請求的次數跟時間
$("#state").append('('+con+')'+now.getHours()+':'
+now.getMinutes()+':'+now.getSeconds()+" -> ");
con++;
}
});
})();
});
test.php 處理訊息的頁面
// 傳來的參數
$id=abs(intval($_GET['id']));
if(empty($_GET['time'])&&empty($id)&&$id<=0){ $arr=array('success'=>"0",'name'=>'xiaocai','text'=>'qqq');
echo json_encode($arr);
exit; }
// 先無限請求超時時間
set_time_limit(0);
//次數
$i=0;
include_once('DB.mysqli.php'); // 取得 $mysqli // 連線
// 但是設定最多跑個10次 // 每次6秒 // 讓他延遲一下不會一直詢問
// 這裡改了就要注意JAVASCRIPT會不會超時
while ($i<3){
sleep(2); // 等一下
$i++;
// 這裡只是測試,PDO自己寫
$result = $mysqli->query("SELECT * FROM `task_list` WHERE `t_id` = {$id} AND `t_delete` = 1");
$num = $result->num_rows;
// 找到就結束了
if($num>0){ $arr=array('success'=>"1",'name'=>'henry','text'=>'說說');
echo json_encode($arr);
// 記得關連線
$mysqli->close();
exit;
}
}
// 但還是要讓它自然結束 , 再讓 js 重新請求
$arr=array('success'=>"0",'name'=>'unknow','text'=>'');
echo json_encode($arr);
// 記得關連線
$mysqli->close();
exit;