我正在尝试构建一个Web应用程序,当数据库发生更改时需要刷新整个页面。我想用AJAX和PHP来实现这一点。我想每5秒向PHP脚本发送一条信息,如果PHP脚本返回的值与预定义变量不同,我想刷新整个页面。
例如,我在javascript为200的预定义值。如果PHP脚本返回不同的值,我想刷新整个页面。
我知道如何编写PHP,它只是我遇到问题的XJAX。如果可能的话,我也不想使用jquery。
提前感谢任何指导!
编辑:我不想使用jquery或任何其他框架,只是原始的javascript。我还需要在更改时刷新整个页面并每5秒运行一次AJAX。答案 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错误,超时等),则响应逻辑可能会无法触发另一个setTimeout
。 setInterval
确保无论连接失败如何都能一致地轮询服务器。
答案 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>