在php中反映列表而不刷新页面
Posted
技术标签:
【中文标题】在php中反映列表而不刷新页面【英文标题】:reflect the list without refreshing the page in php 【发布时间】:2013-05-30 06:20:26 【问题描述】:我正在尝试在我的应用程序中显示在线用户列表。让我解释一下我的要求。 我有一个 mysql DB 表,其中存储了用户名列表及其状态模式(1 或 0)。我有两个 php 页面。一种是列出所有用户名和状态模式。第二页用于编辑用户的模式,从 1 到 0,反之亦然。 现在我从不同的系统打开这两个页面。如果我从一个系统更改一个用户(编辑页面)的状态,那么它会自动反映到另一个系统,在该系统中打开列表页面,更新记录,显然这应该在刷新列表页面之前发生。和 gtalk 聊天用户一样。
我不是在询问代码,但请帮助我如何继续解决问题。显然,cronjob 是其中一种解决方案,请提供另一种解决方案。
提前致谢。
【问题讨论】:
其实你用纯php或者AJAX是达不到要求的。试试其他技术比如node.js什么的 你试过用ajax(你也可以用jQuery ajax)?使用 ajax 将帮助您从服务器获取有关用户状态的必要信息并根据需要进行更新。 @Jerin 这根本不正确。 【参考方案1】:事实上,cronjobs 并不是你需要的。
使用 cronjobs,您可以安排任务。您想要的是在找到新信息时进行客户端刷新。虽然 cronjobs 是服务器端的,并且总是在一个时间间隔内。
您需要的是polling 或commet
首先,轮询,您使用客户端每 x 秒执行一次脚本并查看是否有新信息(我认为浪费资源)。
Commet,现在是一个更好的解决方案。但往往难以实施。我用pusher 处理这类东西。您可以将消息推送到(所有)连接的客户端并说有新信息。然后他们会更新或随着消息而来的还有新信息
【讨论】:
投票是我的建议。 javascript/AJAX 保存表单 onchange。然后,提供 JSON 格式的记录,系统 2 上的 JS/AJAX 可以获取和更新记录,然后休眠 n 秒。 真正容易实现,但是当更多的用户来的时候就不那么好了。使用推送器解决方案,您可以推送它应该更新的通知。这样用户只在需要时更新 我同意,不确定有多少并发用户,或者数据库中有多少行。如果有很多用户,Pusher(或等效)将是最佳选择。 从未使用过推送器,但听起来很有趣。它比轮询更轻资源吗?很难在他们的网站上找到真实世界的信息。 嗯,是的,如果有更新,每隔 x 秒轮询一次。使用 commet(我使用 pusher 是为了方便使用)在更新时发送给客户端(PHP 对 commet 不是很好,因为 PHP 无法将连接连接到后台)。使用推送器,您可以说发送更新,并向所有连接的用户发送通知【参考方案2】:要实现这样的目标,您应该在客户端使用 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 秒刷新一次。
请记住,这根本不是一种有效的方式,如果有很多客户使用您的服务,这将无法正常工作。
【讨论】:
很抱歉给你投了反对票,但这是一个非常糟糕的答案——你可能想提供更多信息。一些链接,一些代码,任何东西。以上是关于在php中反映列表而不刷新页面的主要内容,如果未能解决你的问题,请参考以下文章