目前,我在我正在开发的网站上进行了一项民意调查。民意调查必须进行很多更改/重置,以及嵌入多个页面。有一个管理界面,允许管理员更改投票主题和问题。现在,当管理员更改投票问题时,服务器上的文件会从 0 更改为 1 或从 1 更改为 0,如下所示:
$filename = "check";
$content = file_get_contents($filename, true);
if($content == 1) { $content = 0; }
else{ $content = 1; }
file_put_contents($filename, $content);
嵌入了 poll 的页面然后使用 ajax 每 5 秒检查一次该文件的更改,如果检查文件已从其初始值更改,它会使用 getpoll 函数更新 poll。
function getPoll()
{
$('#pollo').show();
document.getElementById("poll").innerHTML="<img src='ajax-loader.gif'></img>";
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("poll").innerHTML=xmlhttp.responseText;
if(document.getElementById("pollcheck").innerHTML=="")
{
$('#pollo').hide();
}
}
}
xmlhttp.open("GET","/poll/index2.html",true);
xmlhttp.send(null);
}
function checkpoll()
{
if (window.XMLHttpRequest)
{
xml=new XMLHttpRequest();
}
else
{
xml=new ActiveXObject("Microsoft.XMLHTTP");
}
xml.onreadystatechange=function()
{
if (xml.readyState==4 && xml.status==200)
{
check = xml.responseText;
}
}
xml.open("GET","../poll/check",true);
xml.send(null);
}
$(document).ready(function(){
//upon loading the page, get the current poll, and set the initial value of check and pcheck
getPoll();
checkpoll();
pcheck = check;
}
setInterval(function(){
//check the check page every 5 seconds, if check isn't set, set it, if check isn't equal to pcheck, grab the new poll
try{
checkpoll();
if(check == "")
{
checkpoll();
}
if(check != pcheck)
{
getPoll();
pcheck = check;
}
}
catch(Exception){
alert("ERROR, try refreshing");
}
},5000)
现在这似乎工作得相当好,但我知道必须有一个更好的方法来检查服务器上的更改,然后每隔 x 秒使用 xml 请求调用。此外,如果 xml 请求失败,有时它可能会一起破坏更新程序。http://lodeclaw.ardentforge.net/这是目前正在进行投票的网站。