Creating a Load More Data Feature using PHP and Pure JavaScript Tutorial

In this tutorial, you can learn how to create a Load More Feature without leaving the current page or refreshing the page using PHP, MySQL Database, and Pure JavaScript. The tutorial aims to provide students and beginners with a reference for learning to create a website feature that updates the HTML elements or manipulates DOM (Document Object Model) without redirecting to another page or reloading the current page. Here, I will be providing a simple web page that demonstrates the creation of a simple load of more data with a loader without refreshing the page.

What is the Load More Feature?

This tutorial refers to a Load More feature which is a simple component in a web site or web application for displaying the data. Like famous websites or social media sites are often use this kind of feature for displaying or loading data partially and optimizing the page load speed.

How to create a Load More Feature without Refreshing the Page?

The Load More Feature without Refreshing the Page can be acheived easily using Pure JavaScript. Using the JS Fetch API we can make an HTTP Request that retrieves the data from the database so we won't need to leave the current page. After the successful retrieval, we can use DOM Manipulation technique to update the page data or add the new queried data to the current page display. Check out the sample web page scripts that I created and provided below to have a better idea of how to do this.

Sample Web Page

The scritps below result in a simple web page that contains multiple posts or articles which are partially loaded. The data will be queried or retrieved from the database with the given length. The script loads the new data with 3 seconds delay to emphasize that the loader is just for demo purposes only. Then, when all data has been displayed, the load more button will be hidden and a simple text message will be shown that says "You have reached the last data".

Database Schema

The web page that I will be providing used the following dummy database and data. The database is known as sample_db and contains a single table named posts.

  1. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
  2. SET time_zone = "+00:00";
  3.  
  4. --
  5. -- Database: `sample_db`
  6. --
  7.  
  8. -- --------------------------------------------------------
  9.  
  10. --
  11. -- Table structure for table `posts`
  12. --
  13.  
  14. CREATE TABLE `posts` (
  15. `title` text DEFAULT NULL,
  16. `content` text DEFAULT NULL,
  17. `author` varchar(255) DEFAULT NULL,
  18. `date` varchar(255) DEFAULT NULL
  19.  
  20. --
  21. -- Dumping data for table `posts`
  22. --
  23.  
  24. INSERT INTO `posts` (`id`, `title`, `content`, `author`, `date`) VALUES
  25. (1, 'Suspendisse dui. Fusce diam nunc,', 'Nullam velit dui, semper et, lacinia vitae, sodales at, velit. Pellentesque ultricies dignissim lacus. Aliquam rutrum lorem ac risus. Morbi metus. Vivamus euismod urna. Nullam lobortis quam a felis ullamcorper viverra. Maecenas iaculis aliquet diam. Sed diam lorem, auctor quis, tristique ac, eleifend vitae, erat. Vivamus nisi. Mauris nulla. Integer urna. Vivamus molestie dapibus ligula. Aliquam erat volutpat. Nulla dignissim. Maecenas ornare egestas ligula. Nullam feugiat placerat velit. Quisque varius. Nam porttitor scelerisque neque. Nullam nisl. Maecenas malesuada fringilla est. Mauris', 'Maxine Alford', '2015-08-09'),
  26. (2, 'nec metus', 'fermentum convallis ligula. Donec luctus aliquet odio. Etiam ligula tortor, dictum eu, placerat eget, venenatis a, magna. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam laoreet, libero et tristique pellentesque, tellus sem mollis dui, in sodales elit erat vitae risus. Duis a mi fringilla mi lacinia mattis. Integer eu lacus. Quisque imperdiet, erat nonummy ultricies ornare, elit elit fermentum risus, at fringilla purus mauris a nunc. In at pede. Cras vulputate velit eu sem. Pellentesque ut ipsum ac mi eleifend egestas. Sed pharetra, felis eget', 'Hanna Morrow', '2021-03-09'),
  27. (3, 'Nullam scelerisque neque', 'fringilla mi lacinia mattis. Integer eu lacus. Quisque imperdiet, erat nonummy ultricies ornare, elit elit fermentum risus, at fringilla purus mauris a nunc. In at pede. Cras vulputate velit eu sem. Pellentesque ut ipsum ac mi eleifend egestas. Sed pharetra, felis eget varius ultrices, mauris ipsum porta elit, a feugiat tellus lorem eu metus. In lorem. Donec elementum, lorem ut aliquam iaculis, lacus pede', 'Cadman Lynn', '2016-06-18'),
  28. (4, 'eros non enim commodo hendrerit.', 'Aliquam auctor, velit eget laoreet posuere,', 'Lenore Sanchez', '2016-01-24'),
  29. (5, 'conubia nostra, per inceptos', 'diam. Duis mi enim, condimentum eget, volutpat ornare, facilisis eget, ipsum. Donec sollicitudin adipiscing ligula. Aenean gravida nunc sed pede. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vel arcu eu odio tristique pharetra. Quisque ac libero nec ligula consectetuer rhoncus. Nullam velit dui, semper et, lacinia vitae, sodales at, velit. Pellentesque ultricies dignissim lacus. Aliquam rutrum lorem ac risus. Morbi metus. Vivamus euismod urna. Nullam lobortis quam a felis ullamcorper viverra. Maecenas iaculis aliquet diam. Sed diam lorem, auctor quis, tristique ac, eleifend', 'Francis Mcpherson', '2018-01-27'),
  30. (6, 'est mauris, rhoncus id,', 'ultrices posuere cubilia Curae Phasellus ornare. Fusce mollis. Duis sit amet diam eu dolor egestas rhoncus. Proin nisl sem, consequat nec, mollis vitae, posuere at, velit. Cras lorem lorem, luctus ut, pellentesque eget, dictum placerat, augue. Sed molestie. Sed id risus quis diam luctus lobortis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Mauris ut quam vel sapien imperdiet ornare. In faucibus. Morbi vehicula. Pellentesque tincidunt tempus risus. Donec egestas. Duis ac arcu. Nunc mauris. Morbi non sapien molestie orci tincidunt adipiscing. Mauris molestie pharetra nibh.', 'Summer Mccray', '2019-01-04'),
  31. (7, 'inceptos hymenaeos.', 'dictum magna. Ut tincidunt orci quis lectus. Nullam suscipit, est ac facilisis facilisis, magna tellus faucibus leo, in lobortis tellus justo sit amet nulla. Donec non justo. Proin non massa non ante bibendum ullamcorper. Duis cursus, diam at pretium aliquet, metus urna convallis erat, eget tincidunt dui augue eu tellus. Phasellus elit pede, malesuada vel, venenatis vel, faucibus id, libero. Donec consectetuer mauris id sapien. Cras dolor dolor, tempus non, lacinia at, iaculis quis, pede. Praesent eu dui. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eget magna. Suspendisse', 'Zahir Landry', '2015-08-11'),
  32. (8, 'nisi. Cum', 'nisl. Nulla eu neque pellentesque massa lobortis ultrices. Vivamus rhoncus. Donec est. Nunc ullamcorper, velit in aliquet', 'Ruth Lowery', '2020-09-28'),
  33. (9, 'dolor dapibus gravida. Aliquam', 'lacinia mattis. Integer eu lacus. Quisque imperdiet, erat nonummy ultricies ornare, elit elit fermentum risus, at fringilla purus mauris a', 'Quin Gaines', '2015-08-10'),
  34. (10, 'Donec est. Nunc', 'nibh. Aliquam ornare, libero at auctor ullamcorper, nisl arcu iaculis enim, sit amet ornare lectus justo eu arcu. Morbi sit amet massa. Quisque porttitor eros nec tellus. Nunc lectus pede, ultrices a, auctor non, feugiat nec, diam. Duis mi enim, condimentum eget, volutpat ornare, facilisis eget, ipsum. Donec sollicitudin adipiscing ligula. Aenean gravida nunc sed pede. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vel arcu eu', 'Brynne Mendoza', '2022-04-12'),
  35. (11, 'Duis at lacus.', 'pharetra ut, pharetra sed, hendrerit a, arcu. Sed et libero. Proin mi. Aliquam gravida mauris ut mi. Duis risus odio, auctor vitae, aliquet nec, imperdiet nec, leo. Morbi neque tellus, imperdiet non, vestibulum nec, euismod in, dolor. Fusce feugiat.', 'Moses Bailey', '2022-01-18'),
  36. (12, 'eu, ligula. Aenean euismod mauris', 'Vivamus rhoncus. Donec est. Nunc ullamcorper, velit in aliquet lobortis, nisi nibh lacinia orci, consectetuer euismod est arcu ac orci. Ut semper pretium neque. Morbi quis urna. Nunc quis arcu vel quam dignissim pharetra. Nam ac nulla. In tincidunt congue turpis. In condimentum. Donec at arcu. Vestibulum ante ipsum primis', 'Hamish Burch', '2018-02-02'),
  37. (13, 'pede. Suspendisse', 'adipiscing elit. Curabitur sed tortor. Integer aliquam adipiscing lacus. Ut nec urna et arcu imperdiet ullamcorper. Duis at lacus. Quisque purus sapien, gravida non, sollicitudin a, malesuada id, erat. Etiam vestibulum massa rutrum magna. Cras convallis convallis dolor. Quisque tincidunt pede ac urna.', 'Vernon Morse', '2022-10-17'),
  38. (14, 'id risus', 'nunc risus varius orci, in consequat enim diam vel arcu. Curabitur ut odio vel est tempor bibendum. Donec felis orci, adipiscing non, luctus sit amet, faucibus ut, nulla. Cras eu tellus eu augue porttitor interdum. Sed auctor odio a purus. Duis elementum, dui quis', 'Chelsea Hampton', '2015-12-16'),
  39. (15, 'sagittis', 'est, mollis non, cursus non, egestas a, dui. Cras pellentesque. Sed dictum. Proin eget odio. Aliquam vulputate ullamcorper magna. Sed eu eros. Nam consequat dolor vitae dolor. Donec fringilla. Donec feugiat metus sit amet ante. Vivamus non lorem vitae odio sagittis semper. Nam tempor diam dictum sapien. Aenean massa. Integer vitae nibh. Donec est mauris, rhoncus id, mollis nec, cursus a, enim. Suspendisse aliquet, sem ut cursus luctus, ipsum leo elementum sem, vitae aliquam eros turpis non enim. Mauris quis turpis vitae purus gravida sagittis. Duis gravida. Praesent eu nulla at sem molestie sodales. Mauris blandit enim consequat', 'Nehru Dickson', '2016-10-31'),
  40. (16, 'massa rutrum', 'cursus a, enim. Suspendisse aliquet, sem ut cursus luctus, ipsum leo elementum sem, vitae aliquam eros turpis non enim. Mauris quis turpis vitae purus gravida sagittis. Duis gravida. Praesent eu nulla at sem molestie sodales. Mauris blandit enim consequat purus. Maecenas libero est, congue a, aliquet vel, vulputate eu, odio. Phasellus at augue id ante dictum cursus. Nunc mauris elit, dictum eu, eleifend nec, malesuada ut, sem. Nulla interdum. Curabitur dictum. Phasellus in felis. Nulla tempor augue ac', 'Stewart Hardy', '2015-09-06'),
  41. (17, 'dignissim tempor arcu. Vestibulum ut', 'vestibulum massa rutrum magna. Cras convallis convallis dolor. Quisque tincidunt pede ac urna. Ut tincidunt vehicula risus. Nulla eget metus eu erat semper rutrum. Fusce dolor quam, elementum at, egestas a, scelerisque sed, sapien. Nunc pulvinar arcu et pede. Nunc sed orci lobortis augue scelerisque mollis. Phasellus libero mauris, aliquam eu, accumsan sed, facilisis vitae, orci. Phasellus dapibus quam', 'Burton Howe', '2020-04-26'),
  42. (18, 'ridiculus mus. Proin vel arcu', 'feugiat nec, diam. Duis mi enim, condimentum eget, volutpat ornare, facilisis eget, ipsum. Donec sollicitudin adipiscing ligula. Aenean gravida', 'Steel Hansen', '2017-03-29'),
  43. (19, 'cursus vestibulum. Mauris', 'Mauris molestie pharetra nibh. Aliquam ornare, libero at auctor ullamcorper, nisl arcu iaculis enim, sit amet ornare lectus justo eu arcu. Morbi sit amet massa. Quisque porttitor eros nec tellus. Nunc lectus pede, ultrices a, auctor non, feugiat nec, diam. Duis mi enim, condimentum eget, volutpat ornare,', 'Mona Odom', '2019-01-25'),
  44. (20, 'id, mollis nec, cursus', 'Cras pellentesque. Sed dictum. Proin eget odio. Aliquam vulputate ullamcorper magna. Sed eu', 'Victor Cline', '2022-10-09'),
  45. (21, 'diam vel', 'est ac facilisis facilisis, magna tellus faucibus leo, in lobortis tellus justo sit amet nulla. Donec non justo. Proin non massa non ante bibendum ullamcorper. Duis cursus, diam at pretium aliquet, metus urna convallis erat, eget tincidunt dui augue eu tellus. Phasellus elit pede, malesuada vel, venenatis vel, faucibus id, libero. Donec consectetuer mauris id sapien. Cras dolor dolor, tempus non, lacinia at, iaculis quis, pede. Praesent eu dui. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eget magna. Suspendisse tristique neque venenatis lacus. Etiam bibendum fermentum metus. Aenean sed pede nec ante blandit', 'Rhea Hanson', '2015-08-23'),
  46. (22, 'egestas. Sed pharetra,', 'orci. Ut sagittis lobortis mauris. Suspendisse aliquet molestie tellus. Aenean egestas hendrerit neque. In ornare sagittis felis. Donec tempor, est ac mattis semper, dui lectus rutrum urna, nec luctus felis purus ac tellus. Suspendisse sed dolor. Fusce mi lorem, vehicula et, rutrum eu, ultrices sit amet, risus. Donec nibh enim, gravida sit amet, dapibus id, blandit at, nisi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vel nisl. Quisque fringilla euismod enim. Etiam gravida molestie arcu. Sed', 'Clinton Acosta', '2021-08-09'),
  47. (23, 'ante', 'risus. Morbi metus. Vivamus euismod urna. Nullam lobortis', 'Henry Schwartz', '2021-01-10'),
  48. (24, 'semper,', 'felis, adipiscing fringilla, porttitor vulputate, posuere vulputate,', 'Carly Wynn', '2018-03-11'),
  49. (25, 'augue scelerisque mollis. Phasellus', 'mattis. Cras eget nisi dictum augue malesuada malesuada. Integer id magna et ipsum cursus vestibulum. Mauris magna. Duis dignissim tempor arcu. Vestibulum ut eros non enim commodo hendrerit. Donec porttitor tellus non magna. Nam ligula elit, pretium et, rutrum non, hendrerit id, ante. Nunc mauris sapien, cursus in, hendrerit consectetuer, cursus et, magna. Praesent interdum ligula eu enim. Etiam imperdiet dictum magna. Ut tincidunt orci quis lectus. Nullam suscipit, est ac facilisis facilisis, magna tellus faucibus leo, in', 'Pearl Fitzpatrick', '2016-12-30'),
  50. (26, 'purus mauris a nunc.', 'elit, pretium et, rutrum non, hendrerit id, ante. Nunc mauris sapien, cursus in, hendrerit consectetuer, cursus et, magna. Praesent interdum ligula eu enim. Etiam imperdiet dictum magna. Ut tincidunt orci quis lectus. Nullam suscipit, est ac facilisis facilisis, magna tellus faucibus leo, in', 'Laith Hatfield', '2016-09-04'),
  51. (27, 'arcu. Morbi sit amet', 'fringilla cursus purus. Nullam scelerisque neque sed sem egestas blandit. Nam nulla magna, malesuada vel, convallis in, cursus et, eros. Proin ultrices. Duis volutpat nunc sit amet metus. Aliquam erat volutpat. Nulla facilisis. Suspendisse commodo tincidunt nibh. Phasellus nulla. Integer vulputate, risus a ultricies adipiscing, enim mi tempor lorem, eget mollis lectus pede et risus. Quisque libero lacus, varius et, euismod et, commodo at, libero. Morbi accumsan laoreet ipsum. Curabitur consequat, lectus sit amet luctus vulputate, nisi sem semper erat, in consectetuer ipsum nunc id enim. Curabitur massa. Vestibulum accumsan neque et nunc. Quisque', 'Oliver Rowland', '2020-06-15'),
  52. (28, 'faucibus leo, in', 'elit, pellentesque a, facilisis non, bibendum sed, est. Nunc laoreet lectus quis massa. Mauris vestibulum, neque sed dictum eleifend, nunc risus varius orci, in consequat enim diam vel arcu. Curabitur ut odio vel est tempor bibendum. Donec felis orci, adipiscing non, luctus sit', 'Julian Collier', '2019-03-25'),
  53. (29, 'lacus. Nulla tincidunt, neque', 'Nulla eu neque pellentesque massa lobortis ultrices. Vivamus rhoncus. Donec est. Nunc ullamcorper, velit in aliquet lobortis, nisi nibh lacinia orci, consectetuer euismod est arcu ac orci. Ut semper pretium neque. Morbi quis urna. Nunc quis arcu vel quam dignissim pharetra. Nam ac nulla. In tincidunt congue', 'Donovan Wilkins', '2019-07-16'),
  54. (30, 'velit. Cras lorem lorem,', 'congue. In scelerisque scelerisque dui. Suspendisse ac metus vitae velit egestas lacinia. Sed congue, elit sed consequat auctor, nunc nulla vulputate dui, nec tempus mauris erat eget ipsum. Suspendisse sagittis. Nullam vitae diam. Proin', 'Magee Moreno', '2022-08-17'),
  55. (31, 'imperdiet dictum magna. Ut', 'enim diam vel arcu. Curabitur ut odio vel est tempor bibendum. Donec felis orci, adipiscing non, luctus sit amet, faucibus ut, nulla. Cras eu tellus eu augue porttitor interdum. Sed auctor odio a purus. Duis elementum, dui quis accumsan convallis, ante lectus convallis est, vitae sodales nisi magna sed', 'Kay Snider', '2019-06-19'),
  56. (32, 'lorem vitae odio', 'at sem molestie sodales. Mauris blandit enim consequat purus. Maecenas libero est, congue a, aliquet vel, vulputate eu, odio. Phasellus at augue id ante dictum cursus. Nunc mauris elit, dictum eu, eleifend nec, malesuada ut, sem. Nulla interdum. Curabitur dictum. Phasellus in felis. Nulla tempor augue ac ipsum. Phasellus vitae mauris sit amet lorem semper auctor. Mauris vel turpis. Aliquam adipiscing lobortis risus. In mi pede, nonummy ut, molestie in, tempus eu, ligula. Aenean euismod mauris eu elit. Nulla facilisi. Sed neque. Sed eget lacus. Mauris non dui nec urna suscipit nonummy. Fusce fermentum fermentum arcu. Vestibulum ante ipsum', 'Mallory Guy', '2020-06-17'),
  57. (33, 'sagittis semper. Nam tempor', 'ligula eu enim. Etiam imperdiet dictum magna. Ut tincidunt orci quis lectus. Nullam suscipit, est', 'Yvette Mccall', '2021-02-14'),
  58. (34, 'luctus vulputate, nisi', 'eu augue porttitor interdum. Sed auctor odio a purus. Duis elementum, dui quis accumsan convallis, ante lectus convallis est, vitae sodales nisi magna sed dui. Fusce aliquam, enim nec tempus scelerisque, lorem ipsum sodales purus, in molestie tortor nibh sit amet orci. Ut sagittis lobortis mauris. Suspendisse aliquet molestie tellus. Aenean egestas hendrerit neque.', 'Shannon Francis', '2022-01-24'),
  59. (35, 'nisl. Nulla', 'erat volutpat. Nulla dignissim. Maecenas ornare egestas ligula. Nullam', 'Grace Patrick', '2021-01-09'),
  60. (36, 'egestas', 'felis purus ac tellus. Suspendisse sed dolor. Fusce mi lorem, vehicula et, rutrum eu, ultrices sit', 'Octavius Waters', '2022-07-14'),
  61. (37, 'nunc sit amet metus. Aliquam', 'mattis semper, dui lectus rutrum urna, nec luctus felis purus ac tellus. Suspendisse sed dolor. Fusce mi lorem, vehicula et, rutrum eu, ultrices sit amet, risus.', 'Chaim Burgess', '2020-12-30'),
  62. (38, 'rutrum urna, nec', 'arcu vel quam dignissim pharetra. Nam ac nulla. In tincidunt congue turpis. In condimentum. Donec at arcu. Vestibulum ante', 'Asher Cooke', '2018-02-20'),
  63. (39, 'Cum sociis natoque', 'Duis at lacus. Quisque purus sapien, gravida non, sollicitudin a, malesuada id, erat. Etiam vestibulum massa rutrum magna.', 'Dora James', '2016-06-21'),
  64. (40, 'tempus eu, ligula.', 'magna. Suspendisse tristique neque venenatis lacus. Etiam bibendum fermentum metus. Aenean sed pede nec ante blandit viverra. Donec tempus, lorem fringilla ornare placerat, orci lacus vestibulum lorem, sit amet ultricies sem magna nec quam. Curabitur vel lectus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec dignissim magna a tortor. Nunc commodo auctor velit. Aliquam nisl. Nulla eu neque pellentesque massa lobortis ultrices. Vivamus rhoncus.', 'Judah Saunders', '2018-09-02'),
  65. (41, 'pede,', 'Proin sed turpis nec mauris blandit mattis. Cras eget nisi dictum augue malesuada malesuada. Integer id magna et ipsum cursus vestibulum. Mauris magna. Duis dignissim tempor arcu. Vestibulum ut eros non enim commodo hendrerit. Donec porttitor tellus non magna.', 'Harding Holt', '2021-04-16'),
  66. (42, 'orci,', 'ligula. Nullam enim. Sed nulla ante, iaculis nec, eleifend non, dapibus rutrum, justo. Praesent luctus. Curabitur egestas nunc sed libero. Proin sed turpis nec mauris', 'Aileen Craft', '2018-03-04'),
  67. (43, 'odio, auctor vitae, aliquet', 'in magna. Phasellus dolor elit, pellentesque a, facilisis non, bibendum sed, est. Nunc laoreet lectus quis massa. Mauris vestibulum, neque sed dictum eleifend, nunc risus varius orci, in consequat enim diam vel arcu. Curabitur ut odio vel est tempor bibendum. Donec felis orci, adipiscing non, luctus sit amet, faucibus ut, nulla. Cras eu tellus eu augue porttitor interdum. Sed auctor odio a purus. Duis elementum, dui quis accumsan convallis, ante lectus convallis est, vitae sodales nisi magna sed dui. Fusce aliquam, enim nec tempus scelerisque, lorem ipsum sodales purus,', 'Lilah Gilmore', '2015-03-30'),
  68. (44, 'libero. Proin sed', 'cursus et, eros. Proin ultrices. Duis volutpat nunc sit amet metus.', 'Aristotle Ewing', '2019-09-22'),
  69. (45, 'semper rutrum. Fusce dolor', 'Donec fringilla. Donec feugiat metus sit amet ante. Vivamus non lorem vitae odio sagittis semper. Nam tempor diam', 'Alana Pugh', '2019-12-26'),
  70. (46, 'pulvinar arcu et', 'Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vel arcu eu odio tristique pharetra. Quisque ac libero nec ligula consectetuer rhoncus. Nullam velit dui, semper et, lacinia vitae, sodales at, velit. Pellentesque ultricies dignissim lacus. Aliquam rutrum lorem ac risus. Morbi metus. Vivamus euismod urna. Nullam lobortis quam a felis ullamcorper viverra. Maecenas iaculis aliquet diam. Sed diam lorem, auctor quis, tristique ac,', 'Angela Skinner', '2015-08-28'),
  71. (47, 'Sed et libero.', 'ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur sed tortor. Integer aliquam adipiscing lacus. Ut nec urna et arcu imperdiet ullamcorper. Duis at lacus. Quisque purus sapien, gravida non, sollicitudin a, malesuada id, erat. Etiam vestibulum massa rutrum magna. Cras convallis convallis dolor. Quisque tincidunt pede ac urna. Ut tincidunt vehicula risus. Nulla eget metus eu erat semper rutrum. Fusce dolor quam, elementum at, egestas a, scelerisque sed, sapien. Nunc pulvinar arcu et pede. Nunc sed orci lobortis augue scelerisque mollis. Phasellus libero mauris, aliquam eu, accumsan sed, facilisis vitae, orci. Phasellus dapibus', 'Hollee Harper', '2018-01-22'),
  72. (48, 'Suspendisse aliquet molestie tellus. Aenean', 'tincidunt adipiscing. Mauris molestie pharetra nibh. Aliquam ornare, libero at auctor ullamcorper, nisl arcu iaculis enim, sit amet ornare lectus justo eu arcu. Morbi sit amet massa. Quisque porttitor eros nec tellus.', 'Remedios Velez', '2021-02-16'),
  73. (49, 'amet,', 'erat neque non quam. Pellentesque habitant morbi tristique', 'Darrel Francis', '2016-06-04'),
  74. (50, 'tincidunt pede ac', 'dictum mi, ac mattis velit justo nec ante. Maecenas mi felis, adipiscing fringilla, porttitor vulputate, posuere vulputate, lacus. Cras interdum. Nunc sollicitudin commodo ipsum. Suspendisse non leo. Vivamus', 'Linus Chase', '2019-08-18');
  75.  
  76. --
  77. -- Indexes for dumped tables
  78. --
  79.  
  80. --
  81. -- Indexes for table `posts`
  82. --
  83. ALTER TABLE `posts`
  84. ADD PRIMARY KEY (`id`);
  85.  
  86. --
  87. -- AUTO_INCREMENT for dumped tables
  88. --
  89.  
  90. --
  91. -- AUTO_INCREMENT for table `posts`
  92. --
  93. ALTER TABLE `posts`

Database Connection

Next, here is the PHP file script named db-connect.php. It contains the PHP codes that handle the database connection between the web application and MySQL Database.

  1. <?php
  2. $host = "localhost";
  3. $username = "root";
  4. $pw = "";
  5. $dbname = "sample_db";
  6.  
  7. try{
  8. $conn = new MySQLi($host, $username, $pw, $dbname);
  9. if(!$conn){
  10. throw new ErrorException($conn->error, $conn->errno);
  11. }
  12. }catch(Exception $e){
  13. echo '<pre>';
  14. print_r($e);
  15. echo '</pre>';
  16. }

Page Interface

Next, here's the HTML file script named index.html. It contains the page layout, post container, loader, and button elements.

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <meta charset="UTF-8">
  4. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>PHP JS - Load More MYSQL Data</title>
  7. <link rel="preconnect" href="https://fonts.googleapis.com">
  8. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  9. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css">
  10. <link rel="stylesheet" href="style.css">
  11. <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
  12. </head>
  13. <div class="content-md-lg py-3">
  14. <div class="page-title">Load More Data From MySQL using Pure JavaScript</div>
  15. <hr style="margin:auto; width:25px" class="border-light opacity-100">
  16. <div class="col-lg-8 col-md-10 col-sm-12 col-12 mx-auto pt-4 position-relative">
  17. <!-- Post Container -->
  18. <div class="container-fluid mb-3" id="posts-container"></div>
  19. <!-- Post Container -->
  20. <!-- Loader Container -->
  21. <div id="loader">
  22. <div class="d-flex justify-content-center mb-3">
  23. <div class="spinner-border text-light" role="status">
  24. <span class="visually-hidden">Loading...</span>
  25. </div>
  26. </div>
  27. </div>
  28. <!-- Loader Container -->
  29. <!-- No Data to Load Container -->
  30. <div id="noData" class="text-center">
  31. <span class="text-white-50 fst-italic">You have reached the last data</span>
  32. </div>
  33. <!-- No Data to Load Container -->
  34. <!-- Load More Button Container -->
  35. <div>
  36. <div class="col-lg-4 col-md-4 col-sm-10 col-12 mx-auto">
  37. <button class="btn btn-lg btn-dark border-dark-subtle rounded-pill w-100 fw-bolder h3" type="button" id="loadMoreBtn">Load More</button>
  38. </div>
  39. </div>
  40. <!-- Load More Button Container -->
  41. </div>
  42. </div>
  43. <script src="script.js"></script>
  44. </body>
  45. </html>

Stylesheet

Next, here is the CSS file script named style.css. It contains the custom styles that I created for some of the page interfaces and elements.

  1. @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@200&family=Space+Mono&display=swap" rel="stylesheet');
  2. :root{
  3. --space-mono-font: 'Space Mono', monospace;
  4. --border-dark-subtle: #3c3c3c!important;
  5. }
  6. *{
  7. box-sizing: border-box;
  8. }
  9. body *{
  10. font-family: var(--space-mono-font);
  11. }
  12. /**
  13. Page Design
  14. */
  15. body,
  16. html{
  17. height: 100%;
  18. width: 100%;
  19. margin: 0;
  20. padding: 0;
  21. }
  22. body{
  23. background-color: #282A3A;
  24. }
  25. .page-title{
  26. font-size: 2.5rem;
  27. font-weight: 500;
  28. color: #fff;
  29. letter-spacing: 3px;
  30. font-family: var(--secular-font);
  31. text-align: center;
  32. text-shadow: 0px 0px 3px #2020208c;
  33. }
  34. .border-dark-subtle{
  35. border-color: var(--border-dark-subtle)
  36. }
  37. #loader,
  38. #noData{
  39. display: none;
  40. }

PHP API

Next, here is the PHP API named get_data.php. The file contains the PHP code that queries and retrieves the post data from the database. The query only limits to the maximum length given from the request and offsets the already rendered data.

  1. <?php
  2. // include db connection handler
  3. require_once('db-connect.php');
  4. // Extract POST data
  5. extract($_POST);
  6. //Query Statement
  7. $sql = "SELECT * FROM `posts` order by `id` asc limit {$dataLimit} offset {$dataStart}";
  8. //Query Execution
  9. $query = $conn->query($sql);
  10. //Retrieve Data
  11. $data = $query->fetch_all(MYSQLI_ASSOC);
  12.  
  13. //Return Retrieved data as JSON encoded
  14. echo json_encode($data);
  15. ?>

JavaScript

Lastly, here is the JavaScript file script named script.js that contains the code for sending an HTTP Request for retrieving the data from the database and manipulating the current page DOM for displaying the newly retrieved data.

  1. // Post Container Selector
  2. const postContainer = document.getElementById('posts-container')
  3. // Loader Container Selector
  4. const loader = document.getElementById('loader')
  5. // Loader More button Selector
  6. const loadMoreBtn = document.getElementById('loadMoreBtn')
  7. // NoData Selector
  8. const noData = document.getElementById('noData')
  9. // Post Element
  10. const postEl = document.createElement('div')
  11. postEl.classList.add("card", "rounded-0", "bg-dark", "border", "border-dark-subtle", "shadow", "text-light", "mb-3");
  12. postEl.innerHTML = `
  13. <div class="card-header rounded-0 border-dark-subtle">
  14. <div class="card-title fw-bold">
  15. <div class="w-100 d-flex align-items-center justify-content-between">
  16. <div class="post-title col-auto flex-shrink-auto flex-grow-1"></div>
  17. <div class="post-date col-auto flex-shrink-auto text-white-50"></div>
  18. </div>
  19. </div>
  20. </div>
  21. <div class="card-body rounded-0">
  22. <div class="container-fluid">
  23. <p></p>
  24. </div>
  25. </div>
  26. `;
  27.  
  28. /**
  29.   * Post Data Class
  30.   * - queries the data from the PHP API
  31.   */
  32. class PostData {
  33. dataLimit = 10;
  34. dataStart = 0;
  35. constructor(options){
  36. /** Class Options of Configuration Object */
  37. if(!!options){
  38. this.dataLimit = options.dataLimit || 10;
  39. this.dataStart = options.dataStart || 0;
  40. }
  41. }
  42.  
  43. /**
  44.   * Fetch or Retrieve Data From Database
  45.   */
  46. async loadData() {
  47. var resp = {};
  48. var form = new FormData()
  49. form.append('dataLimit', this.dataLimit)
  50. form.append('dataStart', this.dataStart)
  51. await fetch('get_data.php',{
  52. method:'POST',
  53. body: form
  54. })
  55. .then(response => {
  56. return response.json()
  57. })
  58. .then(data => {
  59. resp.status = 'success'
  60. resp.data = data
  61. this.dataStart += data.length
  62. })
  63. .catch ((error) => {
  64. resp.status = 'failed'
  65. resp.data = error
  66. console.error("Error:", error)
  67. })
  68. return resp
  69. }
  70. }
  71. /** Initializing PostData Class */
  72. const posts = new PostData({dataLimit:50});
  73.  
  74. /** Creates the Post Element */
  75. const createEl = (post) =>{
  76. var el = postEl.cloneNode(true)
  77. el.querySelector('.card-title .post-title').innerText = `#${post.id} ${post.author} - ${post.title}`
  78. el.querySelector('.card-title .post-date').innerText = `${post.date}`
  79. el.querySelector('.card-body p').innerText = `${post.content}`
  80. postContainer.appendChild(el)
  81. }
  82.  
  83. /** Loads the Retrieved Data */
  84. const loadData = async (data) => {
  85. await data.forEach(post => {
  86. createEl(post)
  87. })
  88. }
  89.  
  90. /** Sleep or wait for (n) seconds before proceeding to the next action, process, or any */
  91. const sleep = (sec) =>{
  92. return new Promise(resolve => {
  93. setTimeout(()=>{ resolve() }, sec * 1000)
  94. })
  95. }
  96.  
  97. /** Retrieve Data using PostData Class */
  98. const loadPostData = async () =>{
  99. loader.style.display = `block`
  100. loadMoreBtn.setAttribute('disabled', true)
  101. var data = await posts.loadData()
  102. await sleep(3)
  103. if(data.status){
  104. if(!!data.data && data.data.length > 0){
  105. await loadData(data.data)
  106. loader.removeAttribute('style')
  107. loadMoreBtn.removeAttribute('disabled')
  108. }else{
  109. noData.style.display = 'block'
  110. loader.removeAttribute('style')
  111. loadMoreBtn.style.display = 'none'
  112. }
  113.  
  114. }
  115. }
  116.  
  117. /** Run scripts when the page is loaded successfully */
  118. window.addEventListener('load', () => {
  119. /** load the first set of data */
  120. loadPostData()
  121. loadMoreBtn.addEventListener('click', () => {
  122. /** load the next set of data whent load more button is clicked */
  123. loadPostData()
  124. })
  125. })

Snapshots

Here are the snapshots of the overall result of the scripts that I provided above.

Page Interface

Load More Feature using PHP and Pure JS

Loading New Data

Load More Feature using PHP and Pure JS

If reaches the last data

Load More Feature using PHP and Pure JS

DEMO VIDEO

There you go! I hope this Creating a Load More Data Feature using PHP and Pure JavaScript Tutorial will help you with what you are looking for and will be useful for your current and future web application projects.

Explore more on this website for more Tutorials and JavaScripts.

Happy Coding =)

Add new comment