Ajax 无限滚动从 PHP 脚本加载评论。 PHP 脚本为每个评论增加了一个变量$load++
。然后在 sql 中使用 OFFSET $load
并在成功函数中将其在 div 中发送回 AJAX,用户再次滚动变量的值再次发送到 PHP 它检索下一组评论,这有效,但是:
如果多个用户对该帖子发表评论,偏移量变量 $load
不会递增,并且如果用户现在滚动并触发 AJAX 脚本,则不会加载新评论,而是复制最后一条评论,因为offset
没有改变。
有没有更好的方法来设置 offset
变量,还是我做错了?这种分页有什么更好的方法?我应该使用什么方法让脚本加载下一个新评论(如果有的话)?
最佳答案
由于您没有发布任何代码,我将只向您介绍我使用的方法。
我假设您的数据库中有一些唯一的评论标识符,最好是自动递增的 ID。这给你带来的是每条新评论的 ID 都比之前的评论大。因此,当从数据库中获取评论时,您可以将最后一条评论的 ID 存储在您的 JavaScript 代码中。然后,当到达页面末尾后获取更多评论时,您将该 ID 发送到您的 PHP 页面。您可以使用该 ID 来选择比您选择的最后一条消息“更早”的所有消息,或者换句话说,具有较小 ID 号的消息。
一个小示范:
id | comment | ....
1 test1
2 test2
3 test3
4 test4
5 test5
6 test6
请记住,ID为6的评论是最新添加的评论。
假设您在页面上显示了评论 5、4 和 3,并将 ID 3 作为最后一条评论存储在您的 javascript 中。现在 ID 为 6 的评论被添加到数据库中。您尝试获取新评论并发送您存储的 ID,ID 3。在您的 PHP 脚本中,您选择接下来的五个 ID 小于 3 的评论。在本例中,这将是 2 和 1
SELECT id, comment, .... FROM comments WHERE post = ... AND id < 3
即使添加了一条新评论,也没有任何区别,因为您已经保存了上一条评论的 ID,并且您知道接下来会出现什么评论。如您所见,此代码不使用 OFFSET
。
您可以存储评论的时间戳而不是 ID。
由于 ID 存储在客户端,用户可以篡改存储最后一条评论的 ID/时间戳的变量,但如果在 PHP 中正确使用该数据,则不会发生任何事情。
当然,这可能不是最好的方法,也许还有更好的例子。我用过这个,效果很好。
关于php - 当多个用户插入新评论时,在 sql 查询中增加无限滚动分页偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47984520/