简体   繁体   English

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

[英]Pagination coming from AJAX request not working properly -- Laravel 5.6

I'm using Laravel 5.6 -- Jquery Ajax我正在使用 Laravel 5.6 -- Jquery Ajax

Here's the point这是重点

I'm having a search input placed in my navbar there's an eventlistener('keyup') on it.我在导航栏中放置了一个搜索输入,上面有一个 eventlistener('keyup')。

Everytime keyup is fired, an AJAX GET request is send to每次触发 keyup 时,都会发送一个 AJAX GET 请求到

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

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

I made the return of that action a partial with data我使该操作的返回部分包含数据

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

And I replace the content of the main tag with that partial用那个部分替换了主标签的内容

Everything is working properly except when the result count is greater than 10 (the breakpoint of pagination).一切正常,除非结果计数大于 10(分页的断点)。

Pagination control links are all pointing to "search/admin?page=x" and when I click on it, this error is showing分页控制链接都指向“search/admin?page=x”,当我点击它时,显示这个错误

Undefined variable: posts

I used $posts->links() to show the controls我用$posts->links()来显示控件

I found a solution so I post it我找到了解决方案,所以我发布了

In web.php在 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]);
});

This code was for test purpose and will be soon exported in a new controller called SearchController此代码用于测试目的,很快将导出到名为 SearchController 的新控制器中

In my PostController在我的 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]);
}

Working with

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;

}

The index method now accept Request to handle get parameters when they are some. index 方法现在接受 Request 来处理 get 参数。

In my views在我看来

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

Now replace现在更换

{{ $posts->links() }}

The solution was $var->**withPath()** and handling GET parameters解决方案是$var->**withPath()**并处理GET 参数

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

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