我有一个名为posts.blade.php
的视图,它被包含在home.blade.php
中:
<div id="posts">
@foreach ($posts as $post)
<div class="list-item clearfix">
<div class="content">
<img src="{{ URL::to($post->thumbnail) }}" alt="" />
<h1>{{{ $post->title }}}</h1>
</div>
<div class="score">{{ $post->rating }}</div>
</div>
@endforeach
<div id="pagination">{{{ $posts->links() }}}</div>
</div>
当用户搜索某些帖子时,控制器的
postSearch()
函数将返回JSON响应:function postSearch()
{
$posts = $posts->select(...)->where(...)->orderBy(...)->paginate(5); //Search posts
return Response::json(View::make('includes.posts', ['posts' => $posts])->render());
}
而 jQuery 将 HTML 追加到 #posts
div 上:
$('#search').submit(function(e) {
e.preventDefault();
var form = $(this);
$.post(form.attr('action'), form.serialize(), function(data) {
$('#posts').html(data);
});
});
这个功能很完美。但是,当我点击分页链接时,页面会重新加载,我的搜索结果也会消失(显而易见)。如何分页这些帖子?我阅读了这个,这个和这篇文章,但我不知道如何实现它。 编辑 这是到目前为止的分页jQuery代码:
$('#posts').on('click', '.pagination a', function(e) {
e.preventDefault();
var url = $(this).attr('href'),
page = url.split('page=')[1],
data = $('#search').serializeArray();
data.push({page: page}); // Add page variable to post data
console.log(data);
$.post($('#search').attr('action'), data, function(data) {
$('#posts').html(data['posts']);
});
});
当我点击分页链接 (第2页) 时,将发送这些数据:
不幸的是,什么都没有发生,仍然显示第1页的帖子。
http://localhost:8080/laravel/laravel/public?page=2
。 - JasonK$('#search').attr('action')+'?page='+page
。 - lukasgeiterif ($(this).attr('href') == '#')
检查是不必要的,因为当前的分页链接是不可点击的。 - JasonK