javascript - Laravel 和 Ajax - foreach json 对象并处理重复项

标签 javascript php jquery json ajax

我正在尝试使用 Ajax 和 Jquery 制作一个简单的通知系统。

到目前为止我所做的是:

  • 创建了一个 php 文件,从中加载最新帖子及其标题
  • 从上面提到的包含最新帖子及其标题的 php 文件返回 json
  • 创建了 ajax post 请求,使用 success: function(data) 中的 data 参数从 json 及其名称中获取最新帖子
  • 设置每 5 秒重复一次 ajax 调用的时间间隔
  • 在通知 div 中添加最新帖子标题

我遇到的问题是:

  • 如果我将间隔设置为 1 分钟并创建 2 个或更多新帖子,它只会提供较新的帖子(显然,因为我从我的 中调用了 ->first() ->latest(),否则它不会加载任何内容)

  • 正如我之前提到的,我的 setInterval 设置为 5 秒,然后它加载最新的帖子,并且每 5 秒加载一次,因此我每 5 秒就会有一个相同的新帖子直到新的出现为止,我尝试通过仅在前面添加比上一个更高的 id 来修复它,但我不确定这有多可靠

脚本:

通知.php:

$post = Post::latest()->first();
$post_title = $post->title;

return response->json(array('post' => $post, 'post_title' => $post));

使用 AJAX 查看:

function getnewnotif()
{
$.ajax({
type:'POST',
url: url_to_notification.php,
success: function(data){
$('#notif').prepend(data.post_title);
}
});
}

setInterval(getnewnotif(), 5000);

最佳答案

您的 ID 肯定是正确的,但更可靠的可能是创建(或更新)日期。

最简单的形式是,当您发送更多帖子的请求时,发送“上次请求日期”参数。在服务器上,使用它来仅抓取该日期之后创建(或修改 - 不确定您想要哪个)的帖子。在进行 ajax 调用的客户端上,您需要记住上次从服务器请求数据的日期,以便您可以在下一次 ajax 调用中使用它。

但是当涉及多个时区时,这将无法很好地工作。

更可靠的方法是让服务器告诉您现在是本地时间。因此,您发送第一个 ajax 调用,除了帖子列表之外,服务器还会返回向您发送数据的时间。您的 javascript 获取该日期,并在下一次 ajax 调用时将其发送到服务器。然后,它可以仅向您返回该日期之后创建的新帖子。由于它始终是服务器日期与服务器日期,因此时区在这里并不重要。

希望这有帮助!

关于javascript - Laravel 和 Ajax - foreach json 对象并处理重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42099939/

相关文章:

javascript - Highchart 热图 - 日期时间 Y 轴对齐

javascript - Javascript Alert() 方法中的 HTML 标记

php - 随机图像显示

javascript - 迭代没有数组的嵌套 JSON 文件

javascript - 范围查询大型 PouchDB 数据集的最高效方法

javascript - react 中的单选按钮,忽略空值

java - 我的数据无法上传到 mysql 服务器数据库显示字符串无法转换为 JSONobject

php - 为什么它没有重定向

javascript - 使用 javascript 根据两个选项之一设置隐藏值

javascript - 有没有办法先使用 unbind() 然后使用带有计时器的 bind() ?