AJAX, which stands for Asynchronous JavaScript and XML which use to prevent of refresh the web pages.it allow us the user to create web application projects easy and fastest way to implement of without refresh the page.
Laravel is a word best PHP framework to create the web application project.easy implement the all the function.in this tutoril will teach you to work with laravel with ajax.
first need to set up a new Laravel project by running the following command to create a new project:
composer create-project --prefer-dist laravel/laravel ajax-crud
Once the project is created, set up your database configuration in the .env
file. Provide the necessary details such as the database name, username, and password:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravelajax DB_USERNAME=root DB_PASSWORD=
Next step create the migrations and models for the CRUD operations.i am using the entity as Employee
php artisan make:model Employee -m
After that you can check the inside database folder migrations create_employees_table file has been created
successfully.
Select and open the employees table. add the following table fields.
public function up(): void { Schema::create('employees', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email'); $table->string('address'); $table->string('phone'); $table->timestamps(); }); }
After modified the columns names then run the migrate command to create the tables in the databases.before the run the
command please save project then run it.
php artisan migrate
class Employee extends Model { protected $table = 'employees'; protected $primaryKey = 'id'; protected $fillable = [ 'name', 'email', 'address', 'phone', ]; use HasFactory; use HasFactory; }
Create the controller name which is EmployeeController
php artisan make:controller EmployeeController
After created the controller paste this following code snippet
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Employee; class EmployeeController extends Controller { public function store(Request $request) { $empData = [ 'name' => $request->name, 'email' => $request->email, 'address' => $request->address, 'phone' => $request->phone ]; Employee::create($empData); return response()->json([ 'status' => 200, ]); } public function getall() { $employees = Employee::all(); return response()->json([ 'status' => 200, 'employees' => $employees ]); } public function edit($id) { $employee = Employee::find($id); if ($employee) { return response()->json([ 'status' => 200, 'employee' => $employee ]); } else { return response()->json([ 'status' => 404, 'message' => 'Employee not found' ]); } } public function update(Request $request) { $employee = Employee::find($request->id); if ($employee) { $employee->name = $request->name; $employee->email = $request->email; $employee->address = $request->address; $employee->phone = $request->phone; $employee->save(); return response()->json([ 'status' => 200, 'message' => 'Employee updated successfully' ]); } else { return response()->json([ 'status' => 404, 'message' => 'Employee not found' ]); } } public function delete(Request $request) { $employee = Employee::find($request->id); if ($employee && $employee->delete()) { return response()->json(['status' => 200, 'message' => 'Employee deleted successfully.']); } else { return response()->json(['status' => 400, 'message' => 'Failed to delete employee.']); } } }
Once the database is configured, proceed to build the frontend using HTML and JavaScript. Use jQuery to simplify the AJAX requests. Below is a sample HTML form for creating and updating and delete Employees:
Implement similar AJAX requests for reading, updating, and deleting products.
By following these steps, you will create a robust and user-friendly application where CRUD operations are seamlessly integrated with AJAX, enhancing the user experience by updating the UI without full page reloads.
Create the Page Inside the resources folder which name is home.blade.php inside the page you have to paste the following code snippt.
home.blade.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <meta name="csrf-token" content="{{ csrf_token() }}"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdn.datatables.net/2.1.2/css/dataTables.dataTables.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="card mt-4 shadow"> <div class="card-header d-flex justify-content-between align-items-center"> <h4>Employee Registation</h4> <button type="button" class="btn btn-light" data-bs-toggle="modal" data-bs-target="#exampleModal"> <i class="bi bi-database-add"></i> ADD </button> </div> <div class="card-body"> <table id="myTable" class="display"> <thead> <tr> <th>ID</th> <th>Name</th> <th>Email</th> <th>Address</th> <th>Phone</th> <th>Actions</th> </tr> </thead> </table> </div> </div> </div> <!-- Modal --> <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Modal title</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <form id="employee-form" method="post"> <div class="row"> <div class="col-lg"> <label>Name</label> <input type="text" name="name" id="name" class="form-control"> </div> <div class="col-lg"> <label>Email</label> <input type="email" name="email" id="email" class="form-control"> </div> </div> <div class="row"> <div class="col-lg"> <label>Address</label> <input type="text" name="address" id="address" class="form-control"> </div> </div> <div class="row"> <div class="col-lg"> <label>Phone</label> <input type="text" name="phone" id="phone" class="form-control"> </div> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> <button type="submit" class="btn btn-primary" form="employee-form">Save</button> </div> </div> </div> </div> </div> </div> <div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="editModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="editModalLabel">Edit Employee</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <form id="edit-form" method="post"> <input type="hidden" id="edit-id" name="id"> <div class="row"> <div class="col-lg"> <label>Name</label> <input type="text" id="edit-name" name="name" class="form-control"> </div> <div class="col-lg"> <label>Email</label> <input type="email" id="edit-email" name="email" class="form-control"> </div> </div> <div class="row"> <div class="col-lg"> <label>Address</label> <input type="text" id="edit-address" name="address" class="form-control"> </div> </div> <div class="row"> <div class="col-lg"> <label>Phone</label> <input type="text" id="edit-phone" name="phone" class="form-control"> </div> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> <button type="submit" class="btn btn-primary" form="edit-form">Edit</button> </div> </div> </div> </div> </div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <script src="https://cdn.datatables.net/2.1.2/js/dataTables.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script> <script> $(document).ready(function () { var table = $('#myTable').DataTable({ "ajax": { "url": "{{ route('getall') }}", "type": "GET", "dataType": "json", "headers": { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, "dataSrc": function (response) { if (response.status === 200) { return response.employees; } else { return []; } } }, "columns": [ { "data": "id" }, { "data": "name" }, { "data": "email" }, { "data": "address" }, { "data": "phone" }, { "data": null, "render": function (data, type, row) { return '<a href="#" class="btn btn-sm btn-success edit-btn" data-id="'+data.id+'" data-name="'+data.name+'" data-email="'+data.email+'" data-address="'+data.address+'" data-phone="'+data.phone+'">Edit</a> ' + '<a href="#" class="btn btn-sm btn-danger delete-btn" data-id="'+data.id+'">Delete</a>'; } } ] }); $('#myTable tbody').on('click', '.edit-btn', function () { var id = $(this).data('id'); var name = $(this).data('name'); var email = $(this).data('email'); var address = $(this).data('address'); var phone = $(this).data('phone'); $('#edit-id').val(id); $('#edit-name').val(name); $('#edit-email').val(email); $('#edit-address').val(address); $('#edit-phone').val(phone); $('#editModal').modal('show'); }); $('#employee-form').submit(function (e) { e.preventDefault(); const employeedata = new FormData(this); $.ajax({ url: '{{ route('store') }}', method: 'post', data: employeedata, cache: false, contentType: false, processData: false, dataType: 'json', headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, success: function(response) { if (response.status == 200) { alert("Saved successfully"); $('#employee-form')[0].reset(); $('#exampleModal').modal('hide'); $('#myTable').DataTable().ajax.reload(); } } }); }); }); $('#edit-form').submit(function (e) { e.preventDefault(); const employeedata = new FormData(this); $.ajax({ url: '{{ route('update') }}', method: 'POST', data: employeedata, cache: false, contentType: false, processData: false, dataType: 'json', headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, success: function(response) { if (response.status === 200) { alert(response.message); $('#edit-form')[0].reset(); $('#editModal').modal('hide'); $('#myTable').DataTable().ajax.reload(); } else { alert(response.message); } } }); }); $(document).on('click', '.delete-btn', function() { var id = $(this).data('id'); if (confirm('Are you sure you want to delete this employee?')) { $.ajax({ url: '{{ route('delete') }}', type: 'DELETE', data: {id: id}, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, success: function(response) { console.log(response); // Debugging: log the response if (response.status === 200) { alert(response.message); // Show success message $('#myTable').DataTable().ajax.reload(); // Reload the table data } else { alert(response.message); // Show error message } }, error: function(xhr, status, error) { console.error(xhr); // Debugging: log the error alert('Error: ' + error); // Show generic error message } }); } }); </script> </body> </html>
Pages are Manage through routes. If you are crud system simple you can add it the routes one line look like this
<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\EmployeeController; Route::get('/', function () { return view('home'); }); Route::post('/store', [EmployeeController::class, 'store'])->name('store'); Route::get('/getall', [EmployeeController::class, 'getall'])->name('getall'); Route::get('/employee/{id}/edit', [EmployeeController::class, 'edit'])->name('edit'); Route::post('/employee/update', [EmployeeController::class, 'update'])->name('update'); Route::delete('/employee/delete', [EmployeeController::class, 'delete'])->name('delete');
This article explain how to make a Fish Inventory Management App in Angular.this app explain…
Introduction to Fish Inventory Management In the aquaculture industry, managing fish inventory is crucial for…
Introduction to Java GUI CRUD Java is a powerful programming language widely used for building…
Introduction to Login Form Design Designing an effective and beautiful login form is crucial for…
Introduction In today creating a responsive login form is essential for providing a seamless user…
Introduction to Inventory Management Systems In today's fast-paced digital environment, businesses require efficient inventory management…