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

Sam*_*mir 5 php ajax jquery

我正在为我的朋友制作一个社交网站。我想知道当数据库中添加新记录时,如何更新包含数据库中少量插入记录的 Div。简而言之,你一定见过 Facebook 的实时通知,当有人做某事时,这些通知就会淡出。这一切都发生在没有刷新整个实时通知 div 的情况下。只有新通知会添加到 div 前面。

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

先感谢您。

PS:我在很多网站上搜索了解决方案,但找不到任何地方。我什至尝试浏览 facebook 的源代码,但也找不到它!我希望有人在这里帮助我!*交叉手指*

Exp*_*lls 5

您可以使用 Ajax Push 发送帖子已更新的通知,也可以使其成为拉动驱动。如果您已经了解 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();
}
Run Code Online (Sandbox Code Playgroud)

PHP页面:

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

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

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


Kla*_*sen 2

基本上是这样的:

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

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