来自AJAX请求的分页无法正常工作-Laravel 5.6

时间:2018-09-08 20:03:33

标签: php jquery ajax pagination laravel-5.6

我正在使用Laravel 5.6-Jquery Ajax

这就是重点

我在导航栏中放置了一个搜索输入,上面有一个eventlistener('keyup')。

每次触发keyup时,都会向Ajax GET请求发送

url : '{{action('PostController@searchAdmin')}}'

来自web.php: Route::get('/search/admin', 'PostController@searchAdmin');

我用数据使该操作的返回部分

return view('back.partials.searchResult', ['posts' => $posts, 'trashed' => $trashed]);

然后,我用该部分标签替换主标签的内容

一切正常,除非结果计数大于10(分页的断点)。

分页控制链接都指向“ search / admin?page = x”,当我单击它时,此错误正在显示

Undefined variable: posts

我用$posts->links()来显示控件

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,所以我将其发布

在web.php

Route::get('/search', function(Request $request) {
    $search = $request->search;
    $trashed = Post::trash()->count();
    $posts = Post::notTrash()
        ->where('title', 'like', '%' . $search . "%")
        ->orWhere('post_type' , 'like', '%' . $search . '%')
        ->paginate(10);


    $posts->withPath('?search=' . $search);
    return view('back.partials.searchResult', ['posts' => $posts, 'trashed' => $trashed, 'search' => $search]);
});

这段代码仅供测试之用,很快将导出到一个名为SearchController的新控制器中。

在我的PostController中

public function index(Request $request)
{

    // GET parameters
    $paginate = $request->input('paginate') ?? 10;
    $search = $request->input('search') ?? null;

    if($search !== null) {
        $posts = $this->checkCategories($paginate, $search);
    } else {
        $posts = Post::notTrash()->orderBy('id', 'ASC')->paginate($paginate);
    }
    $trashed = Post::trash()->count();
    $posts->withPath('?search=' . $search);

    return view('back.index', ['posts' => $posts, 'trashed' => $trashed, 'search' => $search]);
}

使用

private function checkCategories($paginate, $search)
{
    $categories = Category::all();
    foreach ($categories as $category) {

        if(strpos(strtolower($category->name), $search) === false) {
// @TODO: Change for stripos 
            $posts = Post::notTrash()
                ->where('title', 'like', '%' . $search . '%')
                ->orWhere('post_type', 'like', '%' . $search . '%')
                ->paginate($paginate);
        } else {
            return Category::find($category->id)->posts()->paginate($paginate);
        }
    }

    return $posts;

}

索引方法现在接受请求以处理get参数(如果存在)。

在我看来

   @if($search !== null)
        {{ $posts->appends($search)->links() }}
    @else
        {{ $posts->links() }}
    @endif

现在替换

{{ $posts->links() }}

解决方案是$ var-> withPath(),并处理 GET参数