輪詢

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;

results matching ""

    No results matching ""