当某些内容插入数据库时​​自动刷新div标签

时间:2013-07-22 11:30:04

标签: php ajax database

我创建了一个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>

所以这很棒,但我只需要在新内容插入数据库时​​刷新。 有没有办法做到这一点?

4 个答案:

答案 0 :(得分:3)

我认为可以实现的一种方式是通过PUSH通知。这样您就可以保持与DB的活动连接,并告诉您何时进行了修改。

这也称为“长轮询”或“彗星编程”。 (检查此资源:comet programming)。我个人没有使用过这项技术,所以我不知道它的局限性(我听说过有关浏览器支持的问题)。

我想这样做的方法很简单:

  1. 当您在数据库中存储新值时,还会使用json值(或任何您想要的内容)更新页面,让我们说一个唯一的ID号

  2. 每隔X秒使用你的ajax并检查该页面上ID的值,如果新的更新你的值,如果不是只是睡觉。

  3. 这可能有效,但它会定期检查,而不是在发生变化时。

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