使用AJAX POST到PHP并在更改时刷新


POST to PHP using AJAX and refresh upon change

我试图建立一个web应用程序,需要刷新整个页面时,有一个变化的数据库。我想使用AJAX和PHP来实现这一点。我想每5秒发布一条信息到PHP脚本,如果从PHP脚本返回的值不同于预定义的变量,我想刷新整个页面。

例如,我在javascript中有一个预定义的值200。如果PHP脚本返回一个不同的值,我想刷新整个页面。

我知道如何写PHP,它只是XJAX我有问题。如果可能的话,我也不喜欢使用jquery。

提前感谢任何指导!

编辑:我不想使用jquery或任何其他框架,只是原始javascript。我还需要在更改时刷新整个页面,并每5秒运行一次AJAX。

问得好。您可以执行if(xmlhttp.responseText !== "<?php echo $currentValue; ?>") {来检查php端值是否已更改。这个watchdog方法通过setInterval每5秒调用一次。如果有更改,则通过document.location.reload(true) (ref)刷新页面,以防止重用缓存。

function watchdog() {
  var xmlhttp;
  if (window.XMLHttpRequest){
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else {
    // code for IE6, IE5 - whatever, it doesn't hurt
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      // This is how you can discover a server-side change
      if(xmlhttp.responseText !== "<?php echo $currentValue; ?>") {
        document.location.reload(true); // Don't reuse cache
      }
    }
  };
  xmlhttp.open("POST","page.php",true);
  xmlhttp.send();
}
// Call watchdog() every 5 seconds
setInterval(function(){ watchdog(); }, 5000);

注意:我选择setInterval而不是setTimeout,因为如果与服务器的连接失败(500-error,超时等),则响应逻辑可能无法触发另一个setTimeoutsetInterval确保服务器始终轮询,无论连接失败。

可以使用setInterval()函数每5秒执行一次AJAX。您可以调用AJAX请求完成回调来刷新页面。

请尝试下面的代码。我使用了javascript setInterval函数,它将使ajax每5秒调用一次。现在请根据您的要求努力修改代码,并进一步推进。

<script type="text/javascript" >
    var predefined_val = 'test';// your predefined value.
    $.document(ready(function(){
        setInterval(function(){
            $.ajax({
                type:"POST",
                url:"test/test_script.php", //put relative url here, script which will return php
                data:{}, // if any you would like to post any data
                success:function(response){
                    var data = response; // response data from your php script
                    if(predefined_val !== data){
                        // action you want to perform on value changes.
                    }
                }
            });                     
        },5000);// function will run every 5 seconds
    }));
</script>