我正在尝试在我的内部网络上实现一个长轮询系统,大多数用户使用 IE,有些用户也使用移动设备,这就是为什么我尝试使用长轮询而不是 websockets 来实现它。
我关注了这个视频 http://www.screenr.com/SNH并编辑了一些代码来使用我的数据库。(火鸟)
一切似乎都很好,但它并没有打破循环。也许这是一个孩子的错误,但我看不到,这就是为什么我需要你的帮助!
这是代码:
jQuery + Ajax:
var timestamp = null;
function waitForMsg(){
$.ajax({
type: "GET",
url: "getData.php?timestamp=" + timestamp,
async: true,
cache: false,
success: function(data){
alert('It Works');
var json = eval('(' + data + ')');
timestamp = json['timestamp'];
setTimeout('waitForMsg()',15000);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
alert("A - " + XMLHttpRequest + " - error: " + textStatus + " (" + errorThrown + ")");
setTimeout('waitForMsg()',15000);
}
});
}
$(document).ready(function(){
waitForMsg();
});
</script>
getData.php('DATAHORA' 是时间戳字段)
<?php
set_time_limit(0);
@ini_set("memory_limit",'64M');
require_once('../classes/conexao.php');
$banco = Conexao :: getConexao();
$sql = "SELECT FIRST 1 DATAHORA FROM AGENDAMENTOSBBM ORDER BY DATAHORA DESC";
$res = $banco->execute($sql);
$dados = $banco->fetch($res);
if($dados)
$currentmodif = $dados['DATAHORA']);
else
$currentmodif = 0;
$lastmodif = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;
while( $currentmodif <= $lastmodif ){
usleep(10000);
$sql = "SELECT FIRST 1 DATAHORA FROM AGENDAMENTOSBBM ORDER BY DATAHORA DESC";
$res = $banco->execute($sql);
$dados = $banco->fetch($res);
if($dados)
$currentmodif = $dados['DATAHORA']);
else
$currentmodif = 0;
}
$response = array();
$response['timestamp'] = $currentmodif;
echo json_encode($response);
?>
当我插入、更新或删除一些数据时,时间戳字段会更新为当前时间戳。我可以看到页面进入了循环,但我不知道为什么它永远不会结束。
难道我做错了什么?
谢谢