在laravel中通过ajax动态加载数据



我有一个Post显示方法,我用它们的id来显示每个帖子,这就是它的样子:

$post = Post::find($id);
$comments = Comment::where('post_id', '=', $post->id)->get();
return view('single', compact('post','comments'));

有了这个,我基本上可以加载我的帖子详细信息和发布评论的foreach(到目前为止还不错(。

我想做什么

是通过ajax获取我的评论,所以例如,当user 1正在阅读这篇文章,而user 2在其他地方添加新的评论user 1时,很快就会看到它。因此user 1不需要刷新页面来查看新的注释。

问题

我该怎么做?

您可以将Laravel的通道组合到redis服务器。每次存储评论时,都可以将您的评论推送到post通道,并使用ajax(使用laravel-echo服务器(进行显示。此频道的所有订阅用户都将收到新的评论。

我就是这样做的

PHP

Route::get('/posts/{post}/comments', 'PostsController@comments');
public function post(Post $post) {
return response()->json(
Post::with('comments')->get()   // Create HasMany relation named "comments", see Eloquent Relationships
);
}

Javascript

(function($) {
var intervalMiliseconds = 5000;
var pool = function() {
$.ajax({
method: 'GET',
url: '/post/100/comments',
success: function(response) {
console.log(response);
}
});
};
setInterval(pool, intervalMiliseconds);
})(jQuery);

请避免在javascript代码中使用PHP代码,只需将所有JS代码移动到*.js文件中,并且使用data-*元素属性传递大多数(如果不是全部的话(PHP所需的数据

最新更新