Laravel & Ajax - foreach json object & 处理重复项
Laravel & Ajax - foreach json object & dealing with duplicates
我正在尝试使用 Ajax 和 Jquery 制作一个简单的通知系统。
到目前为止我所做的是:
- 创建了一个 php 文件,我从中加载了 最新 post 及其标题
- Return json 来自上面提到的 php 文件,包含最新的 post 和标题
- 已创建 ajax post 请求从 json 中获取最新的 post 并使用 [=
success: function(data)
中的 16=] 参数
- 设置每 5 秒重复 ajax 调用的时间间隔
- 在通知前添加最新的post标题div
我遇到的问题是:
如果我将间隔设置为 1 分钟并创建 2 个或更多新的 posts 它只会给出较新的一个(显然因为我从 ->first()
调用 ->latest()
, 否则它不会加载任何东西)
正如我之前提到的,我的 setInterval
设置为 5 秒,然后它加载最新的 post,它每 5 秒加载一次,所以我有一个相同的新 post 每 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 绝对正确,但更可靠的可能是创建(或更新)日期。
在最简单的形式中,当您发送更多帖子请求时,发送一个 "last request date" 参数。在服务器上,使用它来仅获取在该日期之后 已创建(或修改 - 不确定您想要哪个)的帖子。在进行 ajax 调用的客户端上,您需要记住从服务器请求数据的最后日期,以便在下一次 ajax 调用中使用它。
但是当涉及多个时区时,这将无法很好地工作。
更稳健的方法是让服务器告诉您现在是当地时间。所以你发送了你的第一个 ajax 调用,除了帖子列表,服务器还 return 发送数据的时间。您的 javascript 获取该日期,并在您的下一个 ajax 调用中将其发送到服务器。然后它可以 return 向您发送在该日期之后创建的新帖子。由于它始终是服务器日期与服务器日期,因此时区在这里无关紧要。
希望对您有所帮助!
我正在尝试使用 Ajax 和 Jquery 制作一个简单的通知系统。
到目前为止我所做的是:
- 创建了一个 php 文件,我从中加载了 最新 post 及其标题
- Return json 来自上面提到的 php 文件,包含最新的 post 和标题
- 已创建 ajax post 请求从 json 中获取最新的 post 并使用 [=
success: function(data)
中的 16=] 参数
- 设置每 5 秒重复 ajax 调用的时间间隔
- 在通知前添加最新的post标题div
我遇到的问题是:
如果我将间隔设置为 1 分钟并创建 2 个或更多新的 posts 它只会给出较新的一个(显然因为我从
->first()
调用->latest()
, 否则它不会加载任何东西)正如我之前提到的,我的
setInterval
设置为 5 秒,然后它加载最新的 post,它每 5 秒加载一次,所以我有一个相同的新 post 每 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 绝对正确,但更可靠的可能是创建(或更新)日期。
在最简单的形式中,当您发送更多帖子请求时,发送一个 "last request date" 参数。在服务器上,使用它来仅获取在该日期之后 已创建(或修改 - 不确定您想要哪个)的帖子。在进行 ajax 调用的客户端上,您需要记住从服务器请求数据的最后日期,以便在下一次 ajax 调用中使用它。
但是当涉及多个时区时,这将无法很好地工作。
更稳健的方法是让服务器告诉您现在是当地时间。所以你发送了你的第一个 ajax 调用,除了帖子列表,服务器还 return 发送数据的时间。您的 javascript 获取该日期,并在您的下一个 ajax 调用中将其发送到服务器。然后它可以 return 向您发送在该日期之后创建的新帖子。由于它始终是服务器日期与服务器日期,因此时区在这里无关紧要。
希望对您有所帮助!