نلاحظ في بعض مواقع التواصل الإجتماعي أو مواقع التجارة الإلكترونية، أن لكما نزلنا لأسفل يتم تحميل المزيد من البيانات، ويتم ذلك بشكل تلقائي، ودون أن يتم تحديث الصفحة وذلك بإستخدام تقنية ajax. في هذا المقال سيتم شرح كيفية عمل ذلك (infinity page scroll) في تطبيقات لارافيل.
Route::get('/users',[UserController::class,'index']);
public function index(Request $request) { $posts = User::paginate(20); $data = ''; if ($request->ajax()) { foreach ($posts as $post) { $data.='<li>'.$post->id.' <strong>'.$post->name.'</strong> : '.$post->email.'</li>'; } return $data; } return view('users'); }
شرح الدالة
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<div class="container"> <div class="wrapper"> <ul id="results"><!-- results appear here --></ul> <div class="ajax-loading"><img src="{{ asset('images/loading.gif') }}" /></div> </div> </div>
ما يهمنا هنا:
<script> var SITEURL = "{{ url('http://www.test.test/') }}"; var page = 1; //track user scroll as page number, right now page number is 1 load_more(page); //initial content load $(window).scroll(function() { //detect page scroll if($(window).scrollTop() + $(window).height() >= $(document).height()) { //if user scrolled from top to bottom of the page page++; //page number increment load_more(page); //load content } }); function load_more(page){ $.ajax({ url: SITEURL + "users?page=" + page, type: "get", datatype: "html", beforeSend: function() { $('.ajax-loading').show(); } }) .done(function(data) { if(data.length == 0){ console.log(data.length); //notify user if nothing to load $('.ajax-loading').html("No more records!"); return; } $('.ajax-loading').hide(); //hide loading animation once data is received $("#results").append(data); //append data into #results element console.log('data.length'); }) .fail(function(jqXHR, ajaxOptions, thrownError) { alert('No response from server'); }); } </script>
شرح كود ajax
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>Laravel 8 load more page scroll - EtharShrouf.com</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <style> .wrapper > ul#results li { margin-bottom: 2px; background: #e2e2e2; padding: 20px; width: 97%; list-style: none; } .ajax-loading{ text-align: center; } </style> </head> <body> <div class="container"> <div class="wrapper"> <ul id="results"><!-- results appear here --></ul> <div class="ajax-loading"><img src="{{ asset('images/loading.gif') }}" /></div> </div> </div> <script> var SITEURL = "{{ url('http://www.test.test/') }}"; var page = 1; //track user scroll as page number, right now page number is 1 load_more(page); //initial content load $(window).scroll(function() { //detect page scroll if($(window).scrollTop() + $(window).height() >= $(document).height()) { //if user scrolled from top to bottom of the page page++; //page number increment load_more(page); //load content } }); function load_more(page){ $.ajax({ url: SITEURL + "users?page=" + page, type: "get", datatype: "html", beforeSend: function() { $('.ajax-loading').show(); } }) .done(function(data) { if(data.length == 0){ console.log(data.length); //notify user if nothing to load $('.ajax-loading').html("No more records!"); return; } $('.ajax-loading').hide(); //hide loading animation once data is received $("#results").append(data); //append data into #results element console.log('data.length'); }) .fail(function(jqXHR, ajaxOptions, thrownError) { alert('No response from server'); }); } </script> </body> </html>
زائر
استمررررر ياهندسه الله يجازيك كل الخير ونتمنى لو فيه حاجه ريال تايم وتكون api