1

我创建了一个从数据库中选择的 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

4 回答 4

3

我认为可以实现的一种方法是通过推送通知。这样您就可以保持与数据库的活动连接,这会告诉您何时进行了修改。

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

但我想一个肮脏的方法是:

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

  2. 每 X 秒使用一次您的 ajax 并检查该页面上的 ID 值,如果有新的更新您的值,如果不只是睡眠。

这可以工作,但它会定期检查,而不是在发生变化时进行检查。

于 2013-07-22T11:42:16.487 回答
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
于 2013-07-22T11:43:15.750 回答
1

使用应该使用 Comet(例如 AJAX + Long Polling

于 2013-07-22T11:35:36.667 回答
1

考虑使用 javascript 库(如 jQuery),您可以在其中找到“setTimeout”之类的函数,它们可以很好地完成您的目标。这是一个例子:

setTimeout(function() {
      // Do something after 5 seconds
}, 5000);
于 2013-07-22T11:37:59.013 回答