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');
                }
            });
        });
avatar taraniskai13
@taraniskai13

16 Kontribusi 15 Poin

Diperbarui 1 tahun yang lalu

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)
avatar alayarahman
@alayarahman

6 Kontribusi 0 Poin

Dipost 1 tahun yang lalu

Login untuk ikut Jawaban