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

时间:2015-06-07 14:16:51

标签: javascript php ajax

我正在尝试构建一个Web应用程序,当数据库发生更改时需要刷新整个页面。我想用AJAX和PHP来实现这一点。我想每5秒向PHP脚本发送一条信息,如果PHP脚本返回的值与预定义变量不同,我想刷新整个页面。

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

我知道如何编写PHP,它只是我遇到问题的XJAX。如果可能的话,我也不想使用jquery。

提前感谢任何指导!

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

3 个答案:

答案 0 :(得分:2)

好问题。您可以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错误,超时等),则响应逻辑可能会无法触发另一个setTimeoutsetInterval确保无论连接失败如何都能一致地轮询服务器。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

<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>