1

我有一个即时更新评论系统(这意味着当任何人在任何地方发布时,它都会更新,而不必重新加载页面。)它使用 setInterval 执行 AJAX 并将其发送到服务器并重新加载评论。所以,评论一直在闪烁。无论如何,我需要一种仅在看到添加了 phpMyadmin SQL 行时才更新评论的方法。

我的网站: http: //learntc.net/index.php

感谢我得到的任何帮助。如果您需要有关某事的更多信息,请发表评论。

4

4 回答 4

2

当您加载评论时,每条记录都会有一个 ID。您将知道页面上加载的最高记录 ID。

当您的 JS 计时器进行 ajax 调用时,让它将加载的最高 ID 发送回服务器。然后,您的查询可以指定仅加载 ID 高于提供的值的记录。然后,您将只获得比页面上的记录更新的记录。

然后,当这些数据被发送回您的页面时,而不是替换整个评论块,只需将新数据附加到现有评论块的末尾即可。

这将防止必须重新加载现有评论。它将防止闪烁,也将使您的 SQL 查询更高效,并节省您的带宽,避免一遍又一遍地发送相同的数据。

希望这足以让您入门。

最后,还有一件事。离题,但我应该提一下:我建议避免使用 JavascriptsetInterval()函数。改为使用setTimer(),并在每次迭代时重新触发它。

这样做的原因是,setInterval()如果任何 JS 代码导致延迟,就会出现问题。例如,如果您有一个alert()用户在屏幕上停留了一段时间,那么在阻塞系统时setInterval()可能发生的调用alert()将全部堆积起来,并且会尽快一个接一个地快速连续触发随着 JS 重新获得控制权。这可能是一个严重的问题。如果您setTimer()改用,您将避免此问题。

如需更好的解释,请在此处阅读:http: //bonsaiden.github.com/JavaScript-Garden/#other.timeouts

于 2012-10-02T20:55:46.673 回答
1
  1. 返回最后一个评论 id 或其时间戳(如果表记录了时间)。
  2. 对于下一个 Ajax 请求,将上述内容作为参数发送并仅查询那些大于现有值的记录。
  3. 附加结果。
于 2012-10-02T20:48:15.250 回答
1

您可以让 AJAX 请求发送用户看到的最后一条评论的 id(您可以将其保存在隐藏的输入中或作为 div 的 id 等)。使用它,您只能向用户返回新评论。在响应功能中,您可以将任何新评论附加到您已有的评论列表中。这将防止所有评论闪烁,并且对您的带宽肯定是健康的;)

于 2012-10-02T20:44:45.580 回答
0

我做了一个这样的系统。代码本身足够大,但主要思想(最简单的一个)是收集页面上可用评论的 id(或者使用最新评论时间就足够了)并加载页面上暂时不可用的评论。(在 AJAX 调用中传递一个标记并在您的查询中使用它来仅获取您真正需要的项目)如果您的评论总是被添加 - 您可以简单地加载一段 HTML 并将其添加到评论列表的末尾。如果评论可能被删除并且您应该表明 - 最好使用 JSON。

关于您当前的实施 - 为什么需要如此频繁的更新?我看到它每秒左右发生一次。您只需加载您的服务器。另外 - 您不需要返回 html、body 等。在您的情况下,这只是一个垃圾。另外 - 响应正文中包含一个 jquery 脚本。为什么???你已经在那里了。

看看jquery的其他AJAX函数。.load不是唯一的。

于 2012-10-02T20:47:16.813 回答