Site Admin
Site Admin Founder of MeaningArticles
994 Views

Codeigniter Load more data on page scroll using jQuery Ajax

Hello Dev.

on this Codeigniter Article, i will assist you to recognize how to implement into load greater data or you may say infinite scroll in Codeignite application.

within the web development, sometime we need to show the page numbers with navigation link for pagination to load paginated records and sometime we need to load information on web page scrolling with out refreshing the entire web page.

Infinite Scroll is the most user-friendly function to add pagination within the data listing.

Infinite scroll pagination replace the old pagination UI (conventional pagination) due to the fact while user clicks at the page number and navigate to subsequent web page then it reloads all of the elements again in the web page and this costs the bandwidth in particular while user browsing something in a mobile with limited data plan.

i will expect that you have downloaded clean version of Codeigniter 3 to check this example.

Codeigniter 3 Load more data on page scroll using jQuery and Ajax

here same step for create Codeigniter 3 Load more data on web page scroll using jQuery and Ajax follow the below steps:
- Database configuration
- Add Route
- Create Controller
- Create View Files
permit’s start create Codeigniter 3 Load more data on web page scroll the use of jQuery and Ajax gradually.


Step 1: Database configuration

in the first step, i can create a new database for this example known as tutorials and create new table posts in this tutorials database.

CREATE TABLE `posts` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `title` varchar(255) NOT NULL,
 `description` text NOT NULL,
 `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `updated_at` timestamp NULL DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Now I must modify the database configuration file with up to date details within the Codeigniter application.
application/config/database.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
    'dsn'    => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'tutorials',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);


Step 2: Add Route

in this step, i'm able to add one route within the route file to manage infinite scroll on data list.
application/config/routes.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

$route['post'] = 'PostController';


Step 3: Create Controller

on this step, i can create a controller "PostController" to manage post data with index method.
application/controllers/PostController.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class PostController extends CI_Controller {

  private $perPage = 10;

    public function index()
    {
     $this->load->database();
     $count = $this->db->get('posts')->num_rows();

     if(!empty($this->input->get("page"))){

      $start = $this->input->get("page") * $this->perPage;
      $query = $this->db->limit($start, $this->perPage)->get("posts");
      $data['posts'] = $query->result();
      $data['count']=$count;

      $result = $this->load->view('ajax_post', $data);
      echo json_encode($result);

     }else{
      $query = $this->db->limit($this->perPage,0)->get("posts");
      $data['posts'] = $query->result();
      $data['count']=$count;

      $this->load->view('post', $data);
     }
    }
}


Step 4: Create View Files

on this step, i will create here two files, first one for the normal web page load view with ajax query and another for ajax page load view.
application/views/post.php

<!DOCTYPE html>
<html>

<head>
    <title>Codeigniter load more data on page scroll - meaningarticles.com</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>

<body>
    <div class="container">
        <h2 class="text-center">Codeigniter 3 - load more data with infinite scroll pagination - meaningarticles.com</h2>
        <br/>
        <div class="col-md-12" id="ajax-post-container">
            <?php $this->load->view('ajax_post', $posts); ?></div>
    </div>
    <div class="loader" style="display:none">
        <img src="<?php print base_url('loader.gif')?>">
    </div>

    <script type="text/javascript">
    var page = 1;
        var total_pages = <?php print $count?>;
     
        $(window).scroll(function() {
            if($(window).scrollTop() + $(window).height() >= $(document).height()) {
                page++;
                if(page < total_pages) {
                    loadMore(page);
                }
            }
        });
    
        function loadMore(page){
          $.ajax(
                {
                    url: '?page=' + page,
                    type: "GET",
                    beforeSend: function()
                    {
                        $('.loader').show();
                    }
                })
                .done(function(data)
                {               
                    $('.loader').hide();
                    $("#ajax-post-container").append(data);
                });
        }
    </script>

</body>

</html>

application/views/ajax_post.php

<?php foreach($posts as $post){ ?>
<div>
    <h3><a href=""><?php echo $post->title ?></a></h3>
    <p><?php echo $post->description ?></p>    
</div>
<?php } ?>

i'm hoping it assist you to, thanks for visit my article if you like my article then proportion together with your friend and social platform.