【发布时间】:2013-07-21 02:55:39
【问题描述】:
我创建了一个 PHP 页面,该页面从数据库 names 中进行选择,并创建了包含 Javascript 代码的 html 页面,以每 5 秒自动刷新 php 页面中的 div 标签,代码如下
<script>
function Ajax(){
var xmlHttp;
try{
xmlHttp=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
}
catch (e){
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
}
catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){
alert("No AJAX!?");
return false;
}
}
}
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
document.getElementById('ReloadThis').innerHTML=xmlHttp.responseText;
setTimeout('Ajax()',1);
}
}
xmlHttp.open("GET","select.php",true);
xmlHttp.send(null);
}
window.onload=function(){
setTimeout('Ajax()',2000);
}
</script>
<div id="ReloadThis"></div>
所以这太棒了,但我只需要在新插入数据库时刷新。 那么有没有办法做到这一点?
【问题讨论】:
-
浏览器如何知道更新?您应该首先查看长轮询服务器或定期连接并询问是否有更新。
-
我很确定如果不使用纯 JavaScript/HTML/PHP 进行轮询,就无法做到这一点。没有轮询的解决方案需要服务器能够与客户端通信。但是一旦服务器发送了客户端需要的所有东西,服务器甚至无法知道客户端是否还在。
-
使用插入数据库中的最新“名称”的时间戳加载名称。然后每隔 X 秒询问服务器数据库中是否有任何新名称 - 不要忘记发送您之前加载的时间戳。如果有更新的名称,请将其发送到浏览器 - 以及新的时间戳。用当前的和覆盖时间戳。让它重复。