繁体   English   中英

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

[英]Laravel & Ajax - foreach json object & dealing with duplicates

我试图使用Ajax和Jquery创建一个简单的通知系统。

到目前为止我所做的是:

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

我遇到的问题是:

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

  • 正如我之前提到的,我的setInterval设置为5秒,然后它加载最新的帖子,它每隔5秒执行一次,所以我每隔5秒就有一个相同的新帖子,直到新的帖子到来,我试着通过前置修复它只比最后一个更高的id,但我不确定它有多可靠

脚本:

Notification.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调用中,你将它发送到服务器。 然后,它可以返回到您在该日期之后创建的新帖子。 由于它始终是服务器日期与服务器日期,因此时区在此无关紧要。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM