在MySql数据库中添加新记录时,使用Jquery自动更新Div

我正在为我的朋友们建立一个社交网站。 我想知道在数据库中添加新记录时,如何更新包含少量数据库插入记录的Div。 简而言之,你必须看到facebook的实时通知,当有人做某事时,它会逐渐消失。 这一切都发生在没有整个实时通知div的刷新。 只有新通知才会添加到div。

我想使用jquery和AJAX这样做,因为我对它们有很好的了解。 和PHP作为服务器端语言。

先感谢您。

PS:我已经搜索了许多网站的解决方案,但无法在任何地方找到它。 我甚至试过浏览Facebook的源代码,但也找不到它! 我希望有人在这帮助我! * 交叉手指 *

基本上它是这样的:

在您的页面上创建一个javascript函数,该函数对php页面进行ajax调用(使用jquery或本机xhr或者不是)。 php页面跟踪“新东西”并在调用时返回它。 js函数在接收数据时,向通知栏添加新标签(div或其他)。 使用javascript的setTimeout函数每隔一段时间调用该函数。

如果其中一些步骤让您感到困惑,请提出更具体的问题。

您可以使用Ajax Push发送更新post的通知,也可以使用拉动驱动。 如果您已经通过PHP了解jquery和Ajax,那么后者可能会更容易。

定期检查一个间隔的新记录(例如,使用setInterval ),如果找到它们,将它们加载到DOM并淡入它们。间隔不必非常小并且浪费资源..也许某事长每隔30秒就能做到。

 setInterval('checkForUpdates', 30000); var lastTime = (new Date()).getTime(); function checkForUpdates() { $.get('/php-page-that-checks-for-updates.php?timestamp=' . lastTime , function (results) { if (results) { /* fade into dom */ } } ); lastTime = (new Date()).getTime(); } 

PHP页面:

 $timestamp = $_REQUEST['timestamp']; $results = query('SELECT post FROM posts WHERE postTime > "$timestamp"'); echo fetch($results); 

正如其他人所建议的那样,您还可以将post标记为“已读”并将其用作指示符而不是时间戳,这也将解决我的示例中的时区问题。 我不想添加一个额外的列只是为了做到这一点,但如果你已经有一个由于其他原因,这是一个好主意。

编辑:这是一个非常古老的答案,但如果你仍然可以这样做,我会使用WebSockets而不是任何类型的ajax长轮询。 我不认为PHP是一种很棒的语言(我建议将socket.io与Node.js一起使用),但这是可能的。

您可以使用jQuery的$.getJSON()方法来访问PHP页面。 此PHP页面将获取所有未读通知(您可以在通知表中添加一个名为“read”的列,并将其设置为0表示未读, 1表示未读)并将其作为JSON提要返回。

解析JSON并使每个都成为页面上显示的div。 然后将它全部包装在一个setInterval()并每隔毫秒运行一次(或半秒钟,或四分之一秒,这取决于你)。

另外,要将它们标记为已读,请在您从JSON通知源创建的这些div上设置单击事件。 单击时,它将联系另一个PHP页面(您可以使用$.post$.get ),例如,它将接收通知的id ,并将read列更改为1。