jquery - 当新数据跨浏览器会话存储到表中时刷新页面

时间:2010-02-03 06:20:33

标签: php jquery mysql

环境:PHP / MySQL / Jquery

我想刷新页面(例如:index.php),当新数据存储到表(例如:new_entry_table)时检查每一分钟。同时在许多机器(pc浏览器)中打开同一页面,当新数据出现时,所有机器都应该刷新。

使用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:
:检查   对于test_db中的新数据   newdata_field = 0;
:如果有新的话   数据出现回声“1”;并更新   newdata_field = 1;经常停下来   刷新页面。
:否则回声   “0”;
:只是为了触发

所以上面的jquery代码每1分钟检查一次触发器的new_data_check.php,如果出现任何触发器,它将刷新容器。但是它只刷新一个打开的会话,其他打开的会话(在其他浏览器或其他PC中)没有得到刷新。

建议更好的方法来做到这一点。感谢。

1 个答案:

答案 0 :(得分:3)

您的new_data_check.php文件需要跟踪独立查看该页面的所有用户。

如果没有,这将会发生:

  • 用户1和用户2都已登录该站点。
  • 用户1在用户1前5秒进行检查,有新数据。
  • 用户1完成了他的请求。服务器清除new_data位。
  • 用户2的请求在5秒后到达。 Hedoes他的请求,但此时,用户1已将new_data字段设置为0.他的数据是陈旧的,但用户1已经有效地选择了他。

从外观上看,除非服务器确定使用IP地址,否则您不会向其提供任何可识别用户的信息。如果是这种情况,请记住,小型网络背后的每个人都可能拥有相同的外部IP地址。所以它无法区分办公室的人。

您可以做的是为每个会话生成某种独特的哈希并将其传递给浏览器。然后javascript可以提供相同令牌的php脚本。

没有任何特殊位的另一种解决方案是传递请求的时间戳。从本质上讲,客户说“我的最新一点数据是在下午9:21:53到达的”服务器然后检查并回复“我之前创建的最新数据,所以你仍然很好。”或“我有在下午9:22:53创建或修改的内容,你应该下载它。“

使用这种方法,您无需担心谁是谁。相反,您需要对要检查过期的数据进行修改/创建。您还需要确保客户端时钟正确同步 - 更好的是,不要相信客户端的日期和时间信息。也许利用你的new_data_check.php为脚本提供一个可以在后续请求中传递的时间戳。