我创建了一个PHP页面,从数据库names
中选择并创建了包含Javascript代码的html页面,每隔5秒从php页面刷新一个div标签,这里的代码是
<script>
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){
document.getElementById('ReloadThis').innerHTML=xmlHttp.responseText;
setTimeout('Ajax()',1);
}
}
xmlHttp.open("GET","select.php",true);
xmlHttp.send(null);
}
window.onload=function(){
setTimeout('Ajax()',2000);
}
</script>
<div id="ReloadThis"></div>
所以这很棒,但我只需要在新内容插入数据库时刷新。 有没有办法做到这一点?
答案 0 :(得分:3)
我认为可以实现的一种方式是通过PUSH通知。这样您就可以保持与DB的活动连接,并告诉您何时进行了修改。
这也称为“长轮询”或“彗星编程”。 (检查此资源:comet programming)。我个人没有使用过这项技术,所以我不知道它的局限性(我听说过有关浏览器支持的问题)。
我想这样做的方法很简单:
当您在数据库中存储新值时,还会使用json值(或任何您想要的内容)更新页面,让我们说一个唯一的ID号
每隔X秒使用你的ajax并检查该页面上ID的值,如果新的更新你的值,如果不是只是睡觉。
这可能有效,但它会定期检查,而不是在发生变化时。
答案 1 :(得分:1)
使用应使用Comet(例如AJAX + 长轮询)
答案 2 :(得分:1)
考虑使用javascript库(比如jQuery),你可以在其中找到像“setTimeout”这样的功能,它可以很好地实现你的目标。 这是一个例子:
setTimeout(function() {
// Do something after 5 seconds
}, 5000);
答案 3 :(得分:1)
@hint嗯......你应该试试http://jquery.com/吗?
例如,您应该发送最后插入的ID:
HTML:
<div id="user-list">
<div class="user-block" data-id="1">User #1</div>
<div class="user-block" data-id="2">User #2</div>
<div class="user-block" data-id="3">User #3</div>
</div>
JS:
var lastID = 0;
$(function() {
setInterval(function() {
var callback = function(response) {
// TODO: for (var i = 0; i < ....)
$('#user-list').append('<div class="user-block" data-id="' + reponse[i].id + '">' + response[i].name + '</div>');
lastID = respose[i].id;
};
$.post(url, {"id" : lastID}, callback, "json")
}, 5000);
});
PHP:
$lastID = $_POST['lastID']; // TODO: security
$query = "SELECT id, name FROM users WHERE id > :id"; // TODO: :id => $lastID
// DO QUERY
echo json_encode($data); // $data = result of query