【发布时间】:2010-05-29 09:16:24
【问题描述】:
我在数据库中有一个包含所有活动用户的表。然后我有一个用户列表,需要刷新以查看谁是最新的在线用户。 解决这个问题的最佳方法是什么? 用户列表始终只是 active_users 表中的用户。 感谢阅读。
【问题讨论】:
标签: php javascript ajax
我在数据库中有一个包含所有活动用户的表。然后我有一个用户列表,需要刷新以查看谁是最新的在线用户。 解决这个问题的最佳方法是什么? 用户列表始终只是 active_users 表中的用户。 感谢阅读。
【问题讨论】:
标签: php javascript 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 所述),以及在最大列表重新加载后手动更新的按钮或链接已达到计数。
【讨论】:
<iframe>,在<head> 标签上带有<meta http-equiv="refresh" content="120"> 之类的东西。
<noscript> 标记内添加 <iframe>,因为在页面中使用框架通常是一种不好的做法,并且按照 emre 的建议使用, load() 与 jQuery 一起用于世界其他地方。
如果您的用户列表很短,例如,您只显示最新的五个用户,我会使用 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();
});
【讨论】:
我能想到的最简单的方法是,您可以制作一个简单的 php 页面来列出数据,并使用 jQuery .load() 函数将该 php 的 html 响应加载到 div 中
$("#divid").load("active-users.php");
【讨论】:
制作一个 php 脚本来检索 active_users 列表并返回一个<ul> 列表。然后使用 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 脚本由你决定...
【讨论】: