更新一个Div自动与Jquery当新记录添加在MySql数据库


Update a Div Automatically with Jquery When New Record Added in MySql Database

我正在为我的朋友做一个社交网站。我想知道我将如何更新一个Div包含几个插入的数据库记录,当一个新的记录被添加到数据库中。简而言之,你一定见过facebook的实时通知,当有人做某事时,它就会消失。这一切都不需要刷新整个实时通知div,只有新的通知被添加到div中。

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

提前谢谢你。

p。S:我在很多网站上都找过解决办法,但都找不到。我甚至试图通过facebook的源代码,但无法找到它!我希望有人在这里帮助我! * 交叉手指*

您可以使用Ajax Push发送帖子更新的通知,也可以使其成为拉驱动。如果您已经了解了jquery和Ajax与PHP,则后者可能对您更容易。

每隔一段时间定期检查新记录(例如,使用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);

正如其他人建议的那样,您还可以将帖子标记为"已读",并将其用作指示符而不是时间戳,这也将解决我的示例中的时区问题。我不想为了这个而增加一个额外的列,但如果你已经有了一个列,这将是一个好主意。

编辑:这是一个相当老的答案,但如果你仍然可以做到这一点,我会使用WebSockets而不是任何类型的ajax长轮询。我不认为PHP是一个伟大的语言(我建议使用套接字)。

基本上是这样的:

在页面上创建一个javascript函数,使ajax调用(使用jquery或原生xhr或其他)到php页面。php页面跟踪"新内容"并在调用时返回它。js函数,当接收数据时,向通知栏添加新标签(div或其他)。javascript的setTimeout函数每隔一段时间调用一次。

如果你对这些步骤感到困惑,请问一个更具体的问题。

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

解析JSON并使每个div显示在页面上。然后将这些都封装在setInterval()中并每毫秒运行一次(或半秒,或四分之一秒,由您决定)。

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