Table of Content
jQuery Ajax upload foto
Kali ini saya mencoba untuk implementasi cara terbaik menurut versi saya. Berikut contoh codingannya…
$(document).on("click", "#btnShowModal", function(){
$("#judulModal").text("Tambah Master Data Bank");
$("#contentModal").empty().append(`
<div class="row">
<div class="col-sm-6">
<div class="mb-3">
<label class="form-label">Nama Bank</label>
<input class="form-control" id="namaBankForm">
</div>
</div>
<div class="col-sm-6">
<div class="mb-3">
<label class="form-label">Foto Logo</label>
<input type="file" id="pictureForm" class="form-control">
</div>
</div>
</div>
<button type="button" class="btn btn-primary" id="btnSubmit">Submit</button>
`);
$(document).on("click", "#btnSubmit", function(){
let namaForm = $("#namaBankForm").val();
let pictureForm = $("#pictureForm")[0].files[0];
let formData = new FormData();
formData.append("nama_bank", namaForm);
formData.append("picture", pictureForm);
$.ajax({
type: "POST",
url: "/su/master/bank/store",
data: formData,
processData: false,
contentType: false,
success: function(res){
notifySuccess(res.message);
},
error: function(xhr){
let errors = xhr.responseJSON.errors;
let message = '';
$.each(errors, function(key, value) {
message += value[0] + '<br>';
});
notifyError(message);
}
})
});
$("#modal").modal("show");
});Penjelasan:
namaForm: Mengambil nilai dari input dengan idnamaBankForm, yang merupakan nama bank yang dimasukkan oleh pengguna.pictureForm: Mengambil file yang diunggah oleh pengguna melalui input file dengan idpictureForm.[0].files[0]digunakan untuk mengambil file pertama yang diunggah oleh pengguna.new FormData(): Membuat objek FormData yang akan digunakan untuk mengirim data dalam format yang sesuai untuk pengiriman Ajax.formData.append("nama_bank", namaForm): Menambahkan nilainama_bankke objek FormData.formData.append("picture", pictureForm): Menambahkan file gambar ke objek FormData.data: formData: Mengirim data dalam format FormData yang berisi nama bank dan file gambar.processData: false: MenetapkanprocessDatakefalseagar jQuery tidak memproses data FormData secara otomatis.contentType: false: MenetapkancontentTypekefalseagar jQuery tidak mengatur tipe konten secara otomatis.
Backendnya
public function store(Request $req)
{
$validator = Validator::make($req->all(), [
'nama_bank' => 'required|string|unique:master_bank',
'picture' => 'required|image|mimes:png'
],[
'nama_bank.required' => 'Nama bank harus diisi!',
'nama_bank.string' => 'Nama bank harus berisi teks!',
'nama_bank.unique' => 'Nama bank sudah ada!',
'picture.required' => 'Foto logo bank harus diunggah.',
'picture.image' => 'File yang diunggah harus berupa gambar.',
'picture.mimes' => 'Format gambar yang diizinkan hanya: png',
]);
if($validator->fails()){
return response()->json([
'errors' => $validator->errors()
], 422);
}else{
$picture = $req->file('picture');
$pictureName = time() . '.' . $picture->getClientOriginalExtension();
$picture->move(public_path('assets/media/banks'), $pictureName);
$master_bank = new MasterBank();
$master_bank->nama_bank = $req->nama_bank;
$master_bank->picture = $pictureName;
$master_bank->save();
return response()->json([
'message' => 'Berhasil membuat master data bank!'
]);
}
}Date: 04-07-2024
