每次更新数据库时如何刷新div?

时间:2012-08-17 17:54:05

标签: php javascript mysql ajax

我正在尝试在我的网站上建立聊天室,我使用php和mysql来存储消息和所有信息。每当有人更新数据库时,我怎么能自动刷新页面?例如:

如果我在我的网站上,消息会显示在我的屏幕上,但在刷新页面后我只能看到更多最近的消息。有没有办法让它实时?

此外,我不太了解javascript / ajax / jquery或其中任何一个。任何帮助表示赞赏!

我网站上的流量会很低。如果那样的话,可能一次大约10-15个人。

7 个答案:

答案 0 :(得分:3)

最好的办法是每隔一秒左右发出一次AJAX请求,看看是否有新消息。

答案 1 :(得分:2)

您可能不希望每次都重新加载页面。我的建议,有很多方法可以做到这一点,就是经常进行ajax调用,并从数据库中检查/提取新信息。

我会研究AJAX并做一个教程。

答案 2 :(得分:2)

这可以通过调用函数并更新div来通过ajax完成。我不建议让人们每次发送信息时刷新页面都会变得难看。另一种选择是使用HTML5网络工作者

http://msdn.microsoft.com/en-us/hh549259.aspx

答案 3 :(得分:2)

你需要学习AJAX才能使这项工作更好,而jQuery可能是最简单的方法。如果我们可以假设您要更新的DIV具有ID PonyRides,那么您可以这样做:

$("#PonyRides").ajax({url: "/chat.php?getupdates=true"});

这将获取chat.php的内容并将其粘贴到#PonyRides DIV中。这假设chat.php将获取数据库的内容并将其格式化为HTML。

剩下的挑战是在数据库运行时更新它,但最简单的方法是重新加载整个聊天,无论是否进行了更新。

这会影响性能,但如果你的聊天次数少于一百次,你可能会很好。如果你有更多,你可以很好地感知不活动并缩短检查周期,或者只发送更新而不是整个聊天。但是,这些是更复杂的主题,一旦你掌握了这些基本概念,你就可以根据需要构建它们。

要执行此操作,只需将ajax()调用包含在如下的时间间隔内:

setInterval(function(){ //the following code runs repeatedly
    $("#PonyRides").ajax({url: "/chat.php?getupdates=true"});  //update our chat div
},5000); //repeat every five seconds

另一种可怕的方法是在iFrame中加载聊天,设置为使用meta refresh技术定期重新加载。这将是可怕的,并且只有在您出于某种原因尝试支持令人难以置信的旧浏览器时才能推荐。

答案 4 :(得分:1)

You can use AJAX request to update the values   

 <script type='text/javascript'>

    // function for making an object for making AJAX request

    function getXMLHTTPRequest() {
    try {
    req = new XMLHttpRequest();
    } catch(err1) {
    try {
    req = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (err2) {
    try {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (err3) {
    req = false;
    }
    }
    }
    return req;
    }

    var http899 = getXMLHTTPRequest();
    function searchFabIndia() {

    var myurl = "http://my2nddomain.com/yebhi.php";
    myRand = parseInt(Math.random()*999999999999999);
    var modurl = myurl+"?rand="+myRand;
    http899.open("GET", modurl, true);
    http899.onreadystatechange = useHttpResponse899;
    http899.send(null);
    }

    function useHttpResponse899() {
    if (http899.readyState == 4) {
    if(http899.status == 200) {
     // do all processings with the obtained values / response here

   // after doing the stuff, call fn again after 30 s say

   setTimeout("searchFabIndia()", 30000);
    }
    }
    }

    </script>
<body onload='searchFabIndia();'>

答案 5 :(得分:0)

我建议对服务器上的文件发出AJAX请求,这将更新数据库。如果对数据库的更新成功,则返回已更新的消息。回到客户端,您等待响应,如果您得到响应,则将消息附加到内容的末尾。这样,您每次都会加载所有邮件(费用很高),您只需加载邮件。

答案 6 :(得分:-1)

必须有类似于SignalR(.net)的php。它允许您在事件发生时添加代码,我认为这正是您要寻找的。