使用AJAX检查更改并仅在发生更改时进行更新

时间:2013-08-03 19:29:38

标签: php javascript ajax web

目前我在我正在制作的网站上进行了一次民意调查。民意调查必须进行大量更改/重置,以及跨多个页面嵌入。有一个管理界面,允许管理员更改民意调查主题和问题。现在,当管理员更改轮询问题时,服务器上的文件会从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);

嵌入轮询的页面然后使用ajax每隔5秒检查一次此文件的更改,如果检查文件已从其初始值更改,则使用getpoll函数更新轮询。

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/这是当前正在运行民意调查的网站。

0 个答案:

没有答案