Hello, everyone in this post we share with you how to make simple ajax crud in laravel application from the scratch. we all are love our application is running simple and fast without the loading page when we are make any action. so, you can done this in laravel using ajax.
In this post, we are sharing simple insert update delete and listing operation using ajax in laravel application but you can be done any type of operation and action with ajax. if you want your application run without page loading.
Just follow bellow step and done your laravel crud using ajax
Step : 1 Create Posts Table Migration
First, we are creating one new table migration to make crud operation on it like insert, update, delete or listing. so, we are here to create one posts table. create posts table migration using the following command.
php artisan make:migration create_posts_table
After running this command open posts table migration file and add the following code. migration file create automatic in database/migrations/ this location.
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostsTable extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('details');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('posts');
}
}
Now, run the following command for run migration.
php artisan migrate
Step : 2 Create Posts Table Model
Next, create post table model using by the following command.
php artisan make:demo Post
Next, open app/Post.php file and past into it following code.
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'title', 'details'
];
}
Step : 3 Create Routes
Next, create the following routes in routes/web.php file.
Route::get('my-posts', 'PostController@myPosts');
Route::resource('posts','PostController');
[ADDCODE]
Look at in the above route here I'm using resources instead of the simple route. I hope you all are very well known why I'm use the resource route? because of we are use the resource route then we not need to create all separate routes like index, create, store, update, delete or show. if your use the resource route then they route automatically created.
Step : 4 Create Controller
Next, we need to create PostController.php file in app/Http/Controllers/ this path and put into it the following code.
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Post;
class PostController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function myPosts()
{
return view('my-posts');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$posts = Post::latest()->paginate(5);
return response()->json($posts);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$post = Post::create($request->all());
return response()->json($post);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$post = Post::find($id)->update($request->all());
return response()->json($post);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Post::find($id)->delete();
return response()->json(['done']);
}
}
Step : 5 Create Blade/View File
Next, we will create my-posts.blade.php file in resources/views/ folder. and simply put into it following code. here i'm using simple bootstrap layout but you can set accourding to you.
<!DOCTYPE html>
<html>
<head>
<title>Laravel 5.5 Ajax CRUD Example</title>
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/css/bootstrap.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Laravel 5.5 Ajax CRUD Example Demo</h2>
</div>
<div class="pull-right">
<button type="button" class="btn btn-success" data-toggle="modal" data-target="#create-item">Create New Post</button>
</div>
</div>
</div>
<table class="table table-bordered">
<thead>
<tr>
<th>Title</th>
<th>Details</th>
<th width="200px">Action</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<ul id="pagination" class="pagination-sm"></ul>
<!-- Create Item Modal -->
@include('create')
<!-- Edit Item Modal -->
@include('edit')
</div>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/js/bootstrap.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twbs-pagination/1.3.1/jquery.twbsPagination.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.5/validator.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>
<link href="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css" rel="stylesheet">
<script type="text/javascript">
var url = "<?php echo route('posts.index')?>";
</script>
<script src="/js/postsAjax.js"></script>
</body>
</html>
Step : 6 Create JS File
Next, we need to create postsAjax.js JS file in public/js/ path and put into it following code.
var page = 1;
var current_page = 1;
var total_page = 0;
var is_ajax_fire = 0;
manageData();
/* manage data list */
function manageData() {
$.ajax({
dataType: 'json',
url: url,
data: {page:page}
}).done(function(data) {
total_page = data.last_page;
current_page = data.current_page;
$('#pagination').twbsPagination({
totalPages: total_page,
visiblePages: current_page,
onPageClick: function (event, pageL) {
page = pageL;
if(is_ajax_fire != 0){
getPageData();
}
}
});
manageRow(data.data);
is_ajax_fire = 1;
});
}
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
/* Get Page Data*/
function getPageData() {
$.ajax({
dataType: 'json',
url: url,
data: {page:page}
}).done(function(data) {
manageRow(data.data);
});
}
/* Add new Post table row */
function manageRow(data) {
var rows = '';
$.each( data, function( key, value ) {
rows = rows + '<tr>';
rows = rows + '<td>'+value.title+'</td>';
rows = rows + '<td>'+value.details+'</td>';
rows = rows + '<td data-id="'+value.id+'">';
rows = rows + '<button data-toggle="modal" data-target="#edit-item" class="btn btn-primary edit-item">Edit</button> ';
rows = rows + '<button class="btn btn-danger remove-item">Delete</button>';
rows = rows + '</td>';
rows = rows + '</tr>';
});
$("tbody").html(rows);
}
/* Create new Post */
$(".crud-submit").click(function(e) {
e.preventDefault();
var form_action = $("#create-item").find("form").attr("action");
var title = $("#create-item").find("input[name='title']").val();
var details = $("#create-item").find("textarea[name='details']").val();
$.ajax({
dataType: 'json',
type:'POST',
url: form_action,
data:{title:title, details:details}
}).done(function(data){
getPageData();
$(".modal").modal('hide');
toastr.success('Post Created Successfully.', 'Success Alert', {timeOut: 5000});
});
});
/* Remove Post */
$("body").on("click",".remove-item",function() {
var id = $(this).parent("td").data('id');
var c_obj = $(this).parents("tr");
$.ajax({
dataType: 'json',
type:'delete',
url: url + '/' + id,
}).done(function(data) {
c_obj.remove();
toastr.success('Post Deleted Successfully.', 'Success Alert', {timeOut: 5000});
getPageData();
});
});
/* Edit Post */
$("body").on("click",".edit-item",function() {
var id = $(this).parent("td").data('id');
var title = $(this).parent("td").prev("td").prev("td").text();
var details = $(this).parent("td").prev("td").text();
$("#edit-item").find("input[name='title']").val(title);
$("#edit-item").find("textarea[name='details']").val(details);
$("#edit-item").find("form").attr("action",url + '/' + id);
});
/* Updated new Post */
$(".crud-submit-edit").click(function(e) {
e.preventDefault();
var form_action = $("#edit-item").find("form").attr("action");
var title = $("#edit-item").find("input[name='title']").val();
var details = $("#edit-item").find("textarea[name='details']").val();
$.ajax({
dataType: 'json',
type:'PUT',
url: form_action,
data:{title:title, details:details}
}).done(function(data){
getPageData();
$(".modal").modal('hide');
toastr.success('Post Updated Successfully.', 'Success Alert', {timeOut: 5000});
});
});
Now we are ready to run our example so run bellow command ro quick run:
php artisan serve
Now you can open bellow URL on your browser:
http://localhost:8000/my-posts
If you want to any problem then please write comment and also suggest for new topic for make tutorials in future. Thanks...