2

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

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

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

我的网站上的流量会很低。一次大概有 10 到 15 个人,如果这样的话。

4

7 回答 7

3

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

于 2012-08-17T17:57:23.200 回答
2

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

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

于 2012-08-17T17:58:08.777 回答
2

这将通过 ajax 通过调用函数并更新 div 来完成。我不建议人们在每次发送消息时都刷新页面,这样会变得丑陋。另一种选择是使用 HTML5 网络工作者

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

于 2012-08-17T17:58:49.120 回答
2

您将需要学习 AJAX 以使其正常工作,而 jQuery 可能是最简单的方法。如果我们可以假设您要更新的 DIV 具有 ID PonyRides,您会想要这样做:

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

这将获取chat.php 的内容并将其粘贴到#PonyRidesDIV 中。这假设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 中加载聊天,设置为使用元刷新技术定期重新加载。这将是可怕的,并且只能在您出于某种原因尝试支持令人难以置信的旧浏览器时才推荐。

于 2012-08-17T18:00:44.557 回答
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();'>
于 2012-08-17T18:01:34.077 回答
0

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

于 2012-08-17T18:00:05.520 回答
-1

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

于 2012-08-17T18:01:19.160 回答