Laravel 8 & Ajax - 将数据插入 table 始终刷新加载
Laravel 8 & Ajax - Insert data into table always refresh loading
首先,我不得不说我是初学者Ajax,我想在不刷新页面的情况下将数据插入数据库,每次我提交新的分类,laravel 始终显示消息“Data berhasil disimpan”,而不是重定向到索引
这是我的控制器
public function store(Request $request)
{
$kategori = new Kategori();
$kategori->nama_kategori = $request->nama_kategori;
$kategori->save();
return response()->json('Data berhasil disimpan', 200);
}
这是我的模态:
<div class="modal fade" id="modal-form" tabindex="-1" aria-labelledby="modal-form" aria-hidden="true">
<div class="modal-dialog">
<form action="" method="post" class="form-horizontal">
@csrf
@method('post')
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="modal-form">Tambah Kategori</h5>
</div>
<div class="modal-body">
<div class="form-group">
<label for="NamaKategori">Nama Kategori</label>
<input type="text" name="nama_kategori" class="form-control" id="NamaKategori"
placeholder="Masukan Nama Kategori" required autofocus>
<span class="help-block with-errors"></span>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-sm btn-flat btn-primary"><i class="fa fa-save"></i>
Simpan</button>
<button type="button" class="btn btn-sm btn-flat btn-warning" data-dismiss="modal"><i
class="fa fa-arrow-circle-left"></i> Batal</button>
</div>
</div>
</form>
</div>
</div>
这是我的 ajax 脚本:
<script>
let table;
$(function () {
table = $('.table').DataTable({
responsive: true,
processing: true,
serverSide: true,
autoWidth: false,
ajax: {
url: '{{ route('kategori.data') }}',
},
columns: [
{data: 'DT_RowIndex', searchable: false, sortable: false},
{data: 'nama_kategori'},
{data: 'aksi', searchable: false, sortable: false},
]
});
$('#modal-form').validator().on('submit', function (e) {
if (! e.preventDefault()) {
$.ajax({
url:$('#modal-form form').attr('action'),
type: 'post',
data: $('#modal-form form').serialize()
})
.done((respone)=>{
$('#modal-form').modal('hide');
table.ajax.reload();
})
.fail((errors)=>{
alert('Tidak dapat menyimpan data');
return;
});
}
});
});
function addForm(url) {
$('#modal-form').modal('show');
$('#modal-form .modal-title').text('Tambah Kategori');
$('#modal-form form')[0].reset();
$('#modal-form form').attr('action', url);
$('#modal-form [name=_method]').val('post');
$('#modal-form [name=nama_kategori]').focus();
}
</script>
当我提交表单时,它 returns 我 JSON 像这样回复“Data berhasil disimpan”
当用户试图提交表单时,submit 事件被发送到一个元素。它只能附加到 <form>
个元素。
您可以在此处查看详细信息:Jquery submit()
在你的 js 代码中 $('#modal-form')
不是 <form>
它只是 <div>
.
因此您应该为表单分配一个 ID,并像这样更改您的代码:
模态:
<form id="myForm" action="" method="post" class="form-horizontal">
...
</form>
Javascript:
$('#myForm').validator().on('submit', function (e) {
if (!e.preventDefault()) {
$.ajax({
url: $('#myForm').attr('action'),
type: 'post',
data: {data : $('#myForm').serialize()}
})
.done((respone) => {
// your code here
})
.fail((errors) => {
// your code here
});
}
});
首先,我不得不说我是初学者Ajax,我想在不刷新页面的情况下将数据插入数据库,每次我提交新的分类,laravel 始终显示消息“Data berhasil disimpan”,而不是重定向到索引
这是我的控制器
public function store(Request $request)
{
$kategori = new Kategori();
$kategori->nama_kategori = $request->nama_kategori;
$kategori->save();
return response()->json('Data berhasil disimpan', 200);
}
这是我的模态:
<div class="modal fade" id="modal-form" tabindex="-1" aria-labelledby="modal-form" aria-hidden="true">
<div class="modal-dialog">
<form action="" method="post" class="form-horizontal">
@csrf
@method('post')
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="modal-form">Tambah Kategori</h5>
</div>
<div class="modal-body">
<div class="form-group">
<label for="NamaKategori">Nama Kategori</label>
<input type="text" name="nama_kategori" class="form-control" id="NamaKategori"
placeholder="Masukan Nama Kategori" required autofocus>
<span class="help-block with-errors"></span>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-sm btn-flat btn-primary"><i class="fa fa-save"></i>
Simpan</button>
<button type="button" class="btn btn-sm btn-flat btn-warning" data-dismiss="modal"><i
class="fa fa-arrow-circle-left"></i> Batal</button>
</div>
</div>
</form>
</div>
</div>
这是我的 ajax 脚本:
<script>
let table;
$(function () {
table = $('.table').DataTable({
responsive: true,
processing: true,
serverSide: true,
autoWidth: false,
ajax: {
url: '{{ route('kategori.data') }}',
},
columns: [
{data: 'DT_RowIndex', searchable: false, sortable: false},
{data: 'nama_kategori'},
{data: 'aksi', searchable: false, sortable: false},
]
});
$('#modal-form').validator().on('submit', function (e) {
if (! e.preventDefault()) {
$.ajax({
url:$('#modal-form form').attr('action'),
type: 'post',
data: $('#modal-form form').serialize()
})
.done((respone)=>{
$('#modal-form').modal('hide');
table.ajax.reload();
})
.fail((errors)=>{
alert('Tidak dapat menyimpan data');
return;
});
}
});
});
function addForm(url) {
$('#modal-form').modal('show');
$('#modal-form .modal-title').text('Tambah Kategori');
$('#modal-form form')[0].reset();
$('#modal-form form').attr('action', url);
$('#modal-form [name=_method]').val('post');
$('#modal-form [name=nama_kategori]').focus();
}
</script>
当我提交表单时,它 returns 我 JSON 像这样回复“Data berhasil disimpan”
当用户试图提交表单时,submit 事件被发送到一个元素。它只能附加到 <form>
个元素。
您可以在此处查看详细信息:Jquery submit()
在你的 js 代码中 $('#modal-form')
不是 <form>
它只是 <div>
.
因此您应该为表单分配一个 ID,并像这样更改您的代码:
模态:
<form id="myForm" action="" method="post" class="form-horizontal">
...
</form>
Javascript:
$('#myForm').validator().on('submit', function (e) {
if (!e.preventDefault()) {
$.ajax({
url: $('#myForm').attr('action'),
type: 'post',
data: {data : $('#myForm').serialize()}
})
.done((respone) => {
// your code here
})
.fail((errors) => {
// your code here
});
}
});