Laravel Ajax滚动分页加载的实现

2019-05-17  本文已影响0人  WananOH

在进行laravel开发项目的时候,我们可能需要用到下拉滚动刷新的方式加载页面。那么在laravel中要怎么实现呢,下面介绍一个简单的方法:

控制器
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Post;

class PostController extends Controller
{

    public function myPost(Request $request)
    {
        $posts = Post::paginate(6);  

        if ($request->ajax()) {
            $view = view('data',compact('posts'))->render();
            return response()->json(['html'=>$view]);
        }

        return view('my-post',compact('posts'));
    }

}
blade视图文件

resources/view/my-post.php

<!DOCTYPE html>
<html>
<head>
    <title>Laravel 分页滚动加载</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
    <style type="text/css">
        .ajax-load{
            background: #e1e1e1;
            padding: 10px 0px;
            width: 100%;
        }
    </style>
</head>
<body>

<div class="container">
    <h2 class="text-center">Laravel 分页滚动加载</h2>
    <br/>
    <div class="col-md-12" id="post-data">
        @include('data')
    </div>
</div>

<div class="ajax-load text-center" style="display:none">
    <p>加载更多……</p>
</div>

<script type="text/javascript">
    var page = 1;
    $(window).scroll(function() {
        if($(window).scrollTop() + $(window).height() + 1>= $(document).height()) {
            page++;
            loadMoreData(page);
        }
    });

    function loadMoreData(page){
        $.ajax(
            {
                url: '?page=' + page,
                type: "get",
                beforeSend: function()
                {
                    $('.ajax-load').show();
                }
            })
            .done(function(data)
            {
                //console.log(data.html);
                if(data.html == " "){
                    $('.ajax-load').html("没有数据了……");
                    return;
                }
                $('.ajax-load').hide();
                $("#post-data").append(data.html);
            })
            .fail(function(jqXHR, ajaxOptions, thrownError)
            {
                alert('服务未响应……');
            });
    }
</script>

</body>
</html>

resources/view/data.php

@foreach($posts as $post)
<div>
    <h3><a href="">{{ $post->title }}</a></h3>
    <p>{{ str_limit($post->description, 400) }}</p>

    <div class="text-right">
        <button class="btn btn-success">Read More</button>
    </div>

    <hr style="margin-top:5px;">
</div>
@endforeach
上一篇下一篇

猜你喜欢

热点阅读