有没有办法在不重新加载页面的情况下自动刷新php代码上的变量?

时间:2011-03-29 17:26:48

标签: php mysql ajax

我有一个PHP文件,其中包含一个表单和一个变量,用于获取mySQL的帖子总数。

$ number显示SQL查询的结果。总数对我有用,因为我使用表格,我也提交了这个号码。在我填写表单期间,该号码可能随时更改,因为用户在此期间提交了新帖子。这意味着我发送的号码是错误的。

我想到了一个重新加载PHP代码的一部分的解决方案,它对我来说很有用。 我不是非常先进的解决方案的PHP专家,所以欢迎任何想法和例子。

4 个答案:

答案 0 :(得分:1)

您可能正在寻找PHP中的AJAX based solution

更新

这是示例 HTML页面,每隔10秒对php脚本进行基于AJAX的调用,以获取变量的刷新值。我故意不使用jquery等来演示如何从HTML页面调用AJAX,这可能需要进行一些调整。

<html>
<head>    
<script type="text/javascript">
var refresh = 10000; // 10 sec; change it if you want
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){
        // here you assign fetched value to your input field
        document.myForm.myVar.value = xmlHttp.responseText;
        setTimeout('Ajax()', refresh);
     }
  }
  xmlHttp.open("GET","http://example.com/script_that_refreshes_var.php",true);
  xmlHttp.send(null);
}

window.onload=function() {
    setTimeout('Ajax()', refresh);
}
</script>
</head>
<body>
<form name="myForm">
   <input type="text" name="myVar" value="<?php echo $myVarInitialVal;?>">
</form>
</body>
</html>

答案 1 :(得分:1)

不要从表单中提交数字,确定获取表单数据的代码中的数字。显然,SQL查询的结果不是表单数据(除非您可以描述您的情况需要的原因)。

如果这不能回答您的问题,我认为我们需要更多信息和一些实际的代码示例来帮助您。

答案 2 :(得分:0)

为什么不简单地抓取处理脚本上的$ number,而不是通过表单发送它。两个用户填写表单,然后点击提交 - &gt;处理脚本始终具有准确的计数。否则你会进入不必要的AJAX使用。

答案 3 :(得分:0)

Javascript setTimeout()循环如何调用AJAX更新函数来检索更新的帖子计数并填写相应的HTML元素?每10秒钟调用一次应该这样做(太频繁了,它会有慢速互联网连接的倾向)。

确切的代码当然取决于所使用的AJAX库以及确切的页面布局。

// Javascript
function startUpdate()
{
   AJAX.call("http://path/to/server/script.php", "updateCallback");
}

function updateCallback(value)
{
    document.getElementById('variableDiv').innerHTML = value;
    setTimeout("startUpdate();", 10000);
}