我试图建立一个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,超时等),则响应逻辑可能无法触发另一个setTimeout
。setInterval
确保服务器始终轮询,无论连接失败。
可以使用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>