如果数据库更改,则自动刷新内容

时间:2011-11-11 22:11:49

标签: php mysql database

当mysql数据库表发生变化时,如何在不刷新页面本身的情况下自动将数据库行(PHP)的值添加到页面中?

所以,它有点像这样:Automatically refresh browser in response to file system changes?而不是在文件系统更改时刷新浏览器,在数据库更改时更新内容而不刷新任何内容。

感谢。我试图尽可能清楚地说明这一点。

3 个答案:

答案 0 :(得分:7)

  

请注意这是过时的答案。最近的方法是:websockets,服务器发送事件。很好的例子是Firebase。您可以在https://github.com/laithshadeed/wsk-feedback中找到简单的代码示例。在此示例中,您将看到更新firebase将通过websocket将事件发送到浏览器,然后UI将更新。

这称为Comet / Reverse Ajax / HTTP服务器推送http://en.wikipedia.org/wiki/Comet_(programming)。他们有很多技术可以做到这一点以及许多现有的框架来为你做这件事。

关于Comet https://stackoverflow.com/search?q=comet

,有很多答案

简单的实现将是javascript setTimeout和setInterval来检查服务器状态,在mysql上使用触发器/存储过程。

深入潜入彗星。关于这个有两本很酷的书:

Comet and Reverse Ajax 2008 By Dave Crane

Comet and Reverse Ajax Cover Image

Chapter 4 (River of Content) - Building the Realtime User Experience 2010 By Ted Roden

Building the Realtime User Experience Cover image

  

更新:您可以在HTML5中查看较新的技术,例如Websockets and Server-sent事件,尽管IE不支持它们,但目前服务器发送的事件为not supported in IE和Web套接字supported in IE10

答案 1 :(得分:0)

这不是一项真正简单的任务,但并不是那么糟糕。你需要一些协同工作的东西:

  • 页面上的javascript例程,用于在指定的间隔检查服务器
  • 服务器上报告轮询时更改的页面
  • 页面上的回调函数,用于在服务器报告更改的数据时插入新元素(或更新/删除现有元素)。

如何确定哪些数据已被更改是您必须考虑的事项。最简单的方法可能是为每条记录保留一个“修改”字段。这样,当您的javascript轮询服务器时,它可以包含“我上次检查”时间戳,服务器只需返回更新的更改。

它并不像最初出现时那么难。利用jQuery之类的预构建库,您可以执行以下操作:

$.ajax({
  url: 'http://example.com/checkforupdates.php?last=' + (new Date().getTime()),
  context: document.body,
  success: function(data){
    // do something here to add/update/remove elements on your page
    // using the information returned in the data argument.
  }
});

答案 2 :(得分:-3)

使用JavaScript操作DOM。