反映列表而不刷新php中的页面

时间:2013-05-30 06:20:27

标签: php mysql

我试图在我的应用程序中显示在线用户列表。让我解释一下我的要求。 我有一个Mysql数据库表,其中存储了用户名列表及其状态模式(1或0)。我有两个php页面。一个用于列出所有用户的名称和状态模式。第二页用于将用户模式从1编辑为0,反之亦然。  现在我从不同的系统打开这两个页面。如果我从一个系统更改一个用户(编辑页面)的状态,那么它将自动反映到打开列表页面的另一个系统,其中包含更新的记录,显然这应该在刷新列表页面之前发生。和gtalk聊天用户一样。

我不是在问代码,但请帮我解决问题。显然,cronjob是解决方案之一,请提供另一种解决方案。

提前致谢。

2 个答案:

答案 0 :(得分:1)

好的cronjobs实际上不是你需要的东西。

使用cronjobs,您可以安排任务。您想要的是在找到新信息时客户端刷新。虽然cronjobs是服务器端,但始终是间隔时间。

您需要的是pollingcommet

第一个,轮询,你每隔x秒使用你的客户端执行一个脚本并查看是否有新信息(在我看来浪费资源)。

Commet,现在是一个更好的解决方案。但往往难以实施。我使用pusher来表示这种类型的东西。您可以将消息推送到(所有)连接的客户端,并说有新信息。然后他们会更新或者消息也会出现新信息

答案 1 :(得分:1)

要实现这样的目标,您应该在客户端使用JavaScript和Ajax。 尝试一下XMLHttpRequest。为了更容易,你可以使用像jQuery这样的东西。 在服务器端,您可以使用json传输数据。 从表中读取数据并将其放入数组中,我们称之为users,键是名称,值是模式(1或0)。

然后使用json_encode(ARRAY)

//Echo the results in json format
echo(json_encode($users));

让我们说,用户'Frank','Susan'和'George'在线,'Isabell'和'John'在线。然后脚本将产生类似于此的输出:

{"Frank":1,"Susan":1,"George":1,"Isabell":0,"John":0}

当然你需要把这个和加载到另一个php脚本,也许是refresh.php。

并且,要从脚本中读取数据,请在视图页面中添加一些JavaScript。 使用XMLHttpRequest从刚刚添加的脚本中请求数据。 或者,如果您使用jQuery,则只需使用$.getJSON("NameOfTheScriptYouJustWrote")返回已经解析的对象。

然后使用返回的数据更新用户列表。并每隔5-20秒刷新一次。

请记住,这根本不是一种有效的方法,如果有许多客户使用您的服务,这将无法正常运作。