Postingan lainnya
Laravel Ajax Duplicate Validation Gagal
Siang bos, tanya lagi nih. Cara munculin error text dibawah input field ketika klik simpan gimana ya? Ini pakai modal, ketika user input data baru dan datanya sudah ada di DB maka input gagal dan muncul text "data sudah ada". Handle error nya sudah jalan cuma kurang munculin text nya saja.
Tampilan F12 > xhr
{status: 422, errors: ["validation.unique"]}
errors : ["validation.unique"]
status : 422
Create ajax
$("#tambah_bidang_tugas_form").submit(function(e) {
e.preventDefault();
$('#error-bidang-tugas').empty();
var form = $(this);
var formData = new FormData(form[0]);
var hasEmptyFields = false;
form.find('input').each(function() {
if ($(this).val().trim() === '') {
var bidang_tugas = $('#bidang_tugas').attr('name');
var inputField = $('#input-field');
var errorContainer = $('#error-bidang-tugas');
errorContainer.empty();
errorContainer.html('Kolom bidang tugas tidak boleh kosong.');
inputField.addClass('is-invalid');
errorContainer.show();
hasEmptyFields = true;
function clearError() {
inputField.removeClass('is-invalid');
errorContainer.empty();
}
function resetInput() {
inputField.val('');
clearError();
}
inputField.on('input', clearError);
$('#tambahBidangTugasModal').on('hidden.bs.modal', resetInput);
}
});
if (hasEmptyFields) {
return;
}
const fd = new FormData(this);
$("#bidang_tugas_simpan").text('Simpan');
$.ajax({
url: '{{ route("create_data") }}',
method: 'post',
data: fd,
cache: false,
contentType: false,
processData: false,
dataType: 'json',
success: function(response) {
if (response.status == 200) {
Toastify({
text: "Data berhasil ditambahkan!",
duration: 5000,
newWindow: true,
gravity: "top",
position: "center",
stopOnFocus: false,
style: {
background: "#71dd37",
},
}).showToast();
fetchAllBidangTugas();
}
$("#bidang_tugas_simpan").text('Simpan');
$("#tambah_bidang_tugas_form")[0].reset();
$("#tambahBidangTugasModal").modal('hide');
},
error: function(xhr, status, error) {
if (xhr.responseJSON && xhr.responseJSON.errors && xhr.responseJSON.errors.bidang_tugas) {
var errorMessage = xhr.responseJSON.errors.bidang_tugas[0];
var inputField = $("#input-field");
var errorContainers = inputField.next('.invalid-feedback');
errorContainers.text(errorMessage);
errorContainers.show();
inputField.addClass("is-invalid");
$('#tambahBidangTugasModal').on('hide.bs.modal', function(e) {
e.preventDefault();
e.stopImmediatePropagation();
});
} else {
console.log(xhr.responseText);
}
$("#bidang_tugas_simpan").text('Simpan');
}
});
});
Tanggapan
coba boleh di share validasi laravel yang dibuat ?
try { $validatedData = $request->validate([ 'bidang_tugas' => 'required|unique:bidang_tugas|max:100', ]);
$validatedData['slug'] = str_replace(' ', '-', $request->bidang_tugas);
Bidang_Tugas::create($validatedData);
return response()->json([
'status' => 200,
]);
} catch (\Illuminate\Validation\ValidationException $e) {
$errors = $e->validator->errors()->all();
return response()->json([
'status' => 422,
'errors' => $errors,
]);
}
1 Jawaban:
berdasarkan pengalaman biasanya error ini terjadi tidak pakai custom message di parameter kedua setelah rules alasannya karena file validation.php di folder lang tidak ada. solusinya bisa dibuat custom message atau pakai metode form request validation cek di dokumentasi laravel.
$request->validate($rules, $message, $attributes)