Laravel 9 autoload more data on Infinite page scroll using ajax jQuery; In this tutorial, we will learn how to create auto load more data in laravel 9 app on page scroll using jQuery ajax.
If we have seen some social media or e-commerce sites that use the Load More data functionality to view dynamic data. This function loads the data from the database without page refresh using AJAX.
Laravel 9 Auto Load More Data on Page Scroll with AJAX jQuery
Follow the following steps to create auto load more data on page scroll using ajax jquery in laravel 9 apps; as follows:
- Step 1 – Install Laravel 9 App
- Step 2 – Connecting App to Database
- Step 3 – Create One Model and Migration
- Step 4 – Add Route
- Step 5 – Create Controller by Command
- Step 6 – Create Blade View
- Step 7 – Run Development Server
- Step 8 – Test This App
Step 1 – Install Laravel 9 App
In this step, Execute the following command on terminal to download or install the laravel 9 app:
composer create-project --prefer-dist laravel/laravel blog
Step 2 – Connecting App to Database
In this step, Open laravel 9 app root directory, find .env file and setup database credential as follow:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=here your database name here
DB_USERNAME=here database username here
DB_PASSWORD=here database password here
Step 3 – Create Model and Migration
In this step, Execute the following command on terminal to create one model and migration name Post. Use the following command and create it:
php artisan make:model Post -m
In this command -m is created the migration file
Next, go to app/database/migrations and open posts migration file and add following fields:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('contacts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('description');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('contacts');
}
}
After that, run the following command:
php artisan migrate
This command will create tables in your database.
Step 4 – Add Route
In this step, open “web.php” file, which is located inside Routes directory and add the following route into web.php file:
use App\Http\Controllers\PostController; Route::get('posts', [PostController::class, 'index']);
Step 5 – Create Controller by Command
In this step, execute the following command on terminal to create controller name PostController.php file:
php artisan make:controller PostController
Next, go to app/http/controller/PostController and open PostController in any editor. And update the following code into your PostController file:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Validator,Redirect,Response;
use App\Models\Post;
class PostController extends Controller
{
public function index(Request $request)
{
$posts = Post::paginate(8);
$data = '';
if ($request->ajax()) {
foreach ($posts as $post) {
$data.='<li>'.$post->id.' <strong>'.$post->title.'</strong> : '.$post->description.'</li>';
}
return $data;
}
return view('posts');
}
}
Step 6 – Create a blade view
In this step, Create one blade file name posts.blade.php. And update the below HTML code into your posts.blade.php file:
<!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 9 load more page scroll - Tutsmake.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>
</body>
</html>
This blade view file displays your all blog posts when you scroll the page down.
Next, update the following script into your blade view file:
<script>
var SITEURL = "{{ url('/') }}";
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 + "posts?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>
Step 7 – Run Development Server
In this step, execute the php artisan serve command on termianl to start development server locally:
php artisan serve
Step 8 – Test This App
Open browser and hit the following url on it:
http://127.0.0.1:8000/posts
Conclusion
Laravel 9 ajax infinity load more on page scroll example tutorial, we have learned how to implement ajax load more data on page scroll in laravel 9 apps.
Recommended Laravel Tutorials