1

So I have built a dashboard for the company I work for, that simply displays all mysql entries that meet certain conditions.

My question is simple, but the answer might not be.

What methods can I use (JavaScript most likely) to refresh the page when a new entry is added to the database.

The database collects information from a webform, so when a new user fills out the form, I'd love the page to refresh, thus showing the new entry.

I'm currently using JavaScript to simply refresh the url that the dashboard sits on, every 5min, but I'd love to have it only update if there is a new entry.

Thank you!

4

1 回答 1

1

请参阅答案末尾的高级解决方案,使用 Web 套接字通知用户更改...

基本解决方案

您可以定期向应用程序发送 Ajax 请求以检查更改。这称为短轮询(如果您想进一步研究它)。基本上,每隔 30 秒,您就会在应用程序上请求一些脚本来检查更改。

可以根据上次修改日期检测更改,或者如果您不能依赖上次修改,则可以根据序列化对象的哈希快照检测更改。

如果有更改,您可以通过 Ajax 请求将其返回。如果可能的话,如果您可以在同一个请求中发送所有更改,则您也不需要进行完全刷新。(或者只是让客户请求另一个页面)。

先进的解决方案

我使用的典型方法如下......

  • 用户连接到网页并打开到服务器的 websocket(如果浏览器不支持 WS,则进行长轮询)。有很多库/服务,例如 Pusher.js 或 Socket.io(如果你想自己运行它)来处理这个问题。

  • 用户将“连接”到一个频道,以表明他们有兴趣接收这条信息或数据或内容的更新……等等。

然后其他人可能会出现并更新一些数据,否则会改变他们对内容的看法。现在,让第一个用户意识到此更改的最简单方法是通过他们的活动 Web 套接字“推送”更改。

我处理这个问题的方法是在事件监听器中包装模型。当我通过应用程序的持久层将模型持久化(99% 的情况是数据库)时,我可以让事件侦听器沿与此模型相关的相应 websocket 连接通道触发事件/数据包。

您可以通过通道发送完整的快照,或者您可以说“嘿,有可用的更新”,然后用户将对服务器进行实际更改。

通过设置观察模型变化的事件侦听器来执行“推送”方法的好处是它可以很好地扩展,并且您不会让成百上千的客户端不断刷新。

于 2013-06-05T20:59:39.303 回答