环境:PHP/MySQL/Jquery
当新数据存储到表(例如:new_entry_table)中时,我想刷新页面(例如:index.php),每隔一分钟检查一次。同一页面将同时在许多机器(电脑浏览器)中打开,当新数据出现时,所有机器都应该刷新。
使用 jquery 和数据库检查我尝试了以下操作:
setInterval(function(){
$.post("new_data_check.php", function(data) {
if(data > 0){
$("#container").fadeOut('fast').load(location.reload());
}
});
return false;
},60000);
new_data_check.php:
: checks for new data in the test_db where newdata_field=0 ;
: If any new data arises echo "1"; And update the newdata_field=1; to stop constantly refreshing the page.
: else echo "0";
: Just for a trigger
所以上面的 jquery 代码每 1 分钟检查一次 new_data_check.php 是否有触发器,如果出现任何触发器,它将刷新容器。但是它只刷新一个打开的 session ,其他打开的 session (在其他浏览器或其他电脑中)不会刷新焕然一新。
建议一个更好的方法来做到这一点。谢谢。
最佳答案
您的 new_data_check.php 文件需要跟踪所有独立查看该页面的用户。
如果没有,就会发生这种情况:
- 用户 1 和用户 2 均已登录该站点。
- 用户 1 在用户 1 之前 5 秒进行检查,有新数据。
- 用户 1 完成了他的请求。服务器清除 new_data 位。
- 用户 2 的请求在 5 秒后到达。他执行了他的请求,但此时,用户 1 已将 new_data 字段设置为 0。他的数据已过时,但用户 1 已有效地选择了他。
从表面上看,您没有向它提供任何可以识别用户身份的信息 - 除非服务器使用 IP 地址来确定这一点。如果是这种情况,请记住,小型网络后面的每个人都可能拥有相同的外部 IP 地址。因此它无法区分办公室里的人。
您可以做的是为每个 session 生成某种唯一的哈希值并将其传递给浏览器。然后 JavaScript 可以为 php 脚本提供相同的标记。
另一种没有任何特殊位的解决方案是随请求传递时间戳。本质上,客户端说“我的最新数据于晚上 9:21:53 到达”,服务器然后检查并响应“我最新的数据是在那之前创建的,所以你仍然很好。”或“我已经得到了于晚上 9:22:53 创建或修改的内容,您应该下载它。”
使用这种方法,您无需担心谁是谁。相反,您需要对正在检查是否陈旧的数据进行修改/创建时间。您还需要确保客户端时钟正确同步 - 更好的是,不要信任客户端的日期和时间信息。也许利用您的 new_data_check.php 为脚本提供可以在后续请求中传递的时间戳。
关于php - jquery - 当新数据跨浏览器 session 存储到表中时刷新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190083/