【问题标题】:Auto refresh when new user comes online新用户上线时自动刷新
【发布时间】:2010-05-29 09:16:24
【问题描述】:

我在数据库中有一个包含所有活动用户的表。然后我有一个用户列表,需要刷新以查看谁是最新的在线用户。 解决这个问题的最佳方法是什么? 用户列表始终只是 active_users 表中的用户。 感谢阅读。

【问题讨论】:

    标签: php javascript ajax


    【解决方案1】:

    AJAX

    您可以使用 AJAX 请求定期提取活跃用户列表并将其显示在您的网站上。

    您可能希望将该列表缓存一段时间在您的服务器上,以防有很多用户不断地请求它。

    或者,如果列表很长,或者如果您决定使用列表提取大量 HTML 标记,您也可以定期轮询您的服务器以检查(缓存的)是否有更新...) 自客户端上次更新列表以来的列表。回复将是简单的真或假,客户端只需在新列表发生更改时请求它。


    元刷新标签

    您也可以使用meta refresh tag 来更新整个页面,或者如果您不介意 iframe,则可以使用 iframe。

    一分钟后刷新:

    <meta http-equiv="refresh" content="60" />
    

    或者使用网址:

    <meta http-equiv="refresh" content="60;url=http://site.com/list.php?counter=1" />
    

    手动更新

    最后,您可以在列表末尾添加一个按钮或一个简单的链接,用户可以自行决定是否重新加载。


    其他注意事项

    正如JoeGeeky 在 cmets 中指出的那样,出于性能和带宽 的原因,您可能需要实现一个计数器来限制加载用户列表的最大次数。这对 Ajax 和 Meta 刷新标签有效。在 javascript 中,您可以简单地在每次加载列表时增加一个变量,并且在元刷新标签的情况下,您可以在 url 中添加计数器作为 get 变量。

    此外,这三种方法并不相互排斥,但应该结合使用Ajax 用于激活 javascript 的人,meta refresh iframe 在 noscript 标记中作为禁用 javascript 的后备标记(如 stagas 所述),以及在最大列表重新加载后手动更新的按钮或链接已达到计数。

    【讨论】:

    • 是的。其他一些技术也有同样的问题(你可以用 flash 来做——但是所有用户都需要 flash ......)
    • @Luke:另一个选项可能是&lt;iframe&gt;,在&lt;head&gt; 标签上带有&lt;meta http-equiv="refresh" content="120"&gt; 之类的东西。
    • Stagas 这很完美,没问题,每 2 分钟刷新一次
    • @Luke:对于关闭 JS 的用户,您还可以在 &lt;noscript&gt; 标记内添加 &lt;iframe&gt;,因为在页面中使用框架通常是一种不好的做法,并且按照 emre 的建议使用, load() 与 jQuery 一起用于世界其他地方。
    • 请记住,有一个隐藏的成本。人们总是远离他们的浏览器。这意味着您将获得数小时或数天的流量,而这些流量却无人问津,并且会花费您的带宽和可能的金钱。确保您设置了最大重新加载计数,该计数仅在真实用户交互或刷新较大页面时重置。
    【解决方案2】:

    如果您的用户列表很短,例如,您只显示最新的五个用户,我会使用 Ajax 对返回该数据的 PHP 脚本进行简单的轮询。

    您可以根据需要调整轮询,

    $(document).ready(function () {
        function refreshUserlist () {
            $.ajax({
                url: "user_list.php",
                success: function (data) {
                    // code to refresh your website with the info out of data
    
                    setTimeout(refreshUserlist, 5000);
                }
            });
        }
    
        refreshUserlist();
    });
    

    【讨论】:

    • 我会使用 setInterval() 和类似的匿名函数。 5000 ms 也会无缘无故地增加服务器的负载。 1-2分钟应该足够了。还要感谢您提醒我正确的 $.ajax 参数,我的回答有误:)
    • 刚刚意识到 setInterval() 在间隔过去之前不会显示用户列表。你的更好:P(除非他在页面的脚本中添加了 include('user_list.php') .. 嗯,在一个问题上花费了太多时间)
    【解决方案3】:

    我能想到的最简单的方法是,您可以制作一个简单的 php 页面来列出数据,并使用 jQuery .load() 函数将该 php 的 html 响应加载到 div 中

    $("#divid").load("active-users.php");

    【讨论】:

      【解决方案4】:

      制作一个 php 脚本来检索 active_users 列表并返回一个&lt;ul&gt; 列表。然后使用 jQuery 和setInterval()$.ajax() 获取该列表,并每隔1-2 分钟左右将列表替换为$('#active_user_list').html(new_list_data)。以下是它的样子(未经测试):

      setInterval(function() {
         $.ajax({ url: 'script_to_fetch_active_users_list.php', success: function(new_list_data) {
            $('#active_user_list').html(new_list_data);
         } });
      }, 1000*120);
      

      php 脚本由你决定...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-28
        • 2021-04-25
        • 2021-09-19
        • 1970-01-01
        • 2020-04-24
        • 1970-01-01
        • 1970-01-01
        • 2017-10-22
        相关资源
        最近更新 更多