feat : fix fetch bug

This commit is contained in:
unknown
2026-06-09 12:28:44 +07:00
parent 1d55676e3e
commit f6231c1475
7 changed files with 152 additions and 128 deletions
+3 -20
View File
@@ -196,7 +196,6 @@
</main>
<script>
// Deklarasi Status Langkah Global
let langkah_sekarang = 1;
const total_langkah = 4;
@@ -208,25 +207,19 @@
const btn_kirim = document.getElementById('btn_kirim');
const peringatan_error = document.getElementById('peringatan_error');
// Menampilkan pesan notifikasi kegagalan validasi ke antarmuka pengguna
function tampilkan_error(pesan) {
peringatan_error.textContent = pesan;
peringatan_error.classList.remove('hidden');
}
// Menyembunyikan wadah notifikasi kegagalan
function sembunyikan_error() {
peringatan_error.classList.add('hidden');
peringatan_error.textContent = '';
}
// Memastikan kelayakan data masukan di setiap bagian formulir sebelum melangkah
function validasi_langkah_aktif() {
sembunyikan_error();
/* Baris Kompleks: Logika kondisional bersarang (switch case) memisahkan aturan validasi
berdasarkan indeks tahapan aktif, memastikan konversi dan ekspresi reguler teks tepat
sebelum dievaluasi agar terhindar dari pengiriman muatan bernilai kosong ke server. */
switch(langkah_sekarang) {
case 1:
if (!/^\d{16}$/.test(document.getElementById('input_nik').value)) {
@@ -260,7 +253,7 @@
!document.getElementById('input_sumber_penerangan').value ||
!document.getElementById('input_frekuensi_makan').value ||
!document.getElementById('input_kepemilikan_aset').value) {
tampilkan_error('Seluruh parameter utilitas dan sosial ekonomi wajib dipilih.');
tampilkan_error('Seluruh parameter utilitas and sosial ekonomi wajib dipilih.');
return false;
}
if (document.getElementById('input_pekerjaan').value.trim() === '') {
@@ -283,7 +276,6 @@
return true;
}
// Menggerakkan alur visual formulir multi-langkah maju atau mundur
function ubah_langkah(arah) {
if (arah === 1 && !validasi_langkah_aktif()) return;
@@ -294,7 +286,6 @@
perbarui_antarmuka_wizard();
}
// Sinkronisasi status bar kemajuan dan kontrol tombol navigasi bawah
function perbarui_antarmuka_wizard() {
if (langkah_sekarang === 1) {
btn_mundur.classList.add('hidden');
@@ -327,7 +318,6 @@
if(document.getElementById('garis_3')) document.getElementById('garis_3').style.width = langkah_sekarang >= 4 ? '100%' : '0%';
}
// Inisialisasi komponen GIS Leaflet untuk penentuan lokasi rumah warga
function inisialisasi_peta() {
if (instansi_peta !== null) {
instansi_peta.invalidateSize();
@@ -339,9 +329,6 @@
attribution: '&copy; OpenStreetMap'
}).addTo(instansi_peta);
/* Baris Kompleks: Penangkapan event klik pada objek peta Leaflet secara dinamis
mengekstrak properti koordinat lintang dan bujur (latlng) untuk memindahkan objek penanda
serta mengisi elemen masukan teks masukan secara otomatis. */
instansi_peta.on('click', function(e) {
const lat = e.latlng.lat;
const lng = e.latlng.lng;
@@ -355,7 +342,6 @@
});
}
// Mengakses perangkat keras penerima gelombang navigasi satelit melalui web API browser
function dapatkan_lokasi_gps() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
@@ -380,14 +366,12 @@
}
}
// Mengirimkan enkapsulasi objek data survei menuju web server secara asinkron
async function kirim_data_survei() {
if (!validasi_langkah_aktif()) return;
btn_kirim.disabled = true;
btn_kirim.innerHTML = 'Mengirim Data...';
// Konstruksi objek payload JSON disesuaikan secara presisi dengan skema database_baru.sqlite
const payload_survei = {
nik: document.getElementById('input_nik').value,
nama_kk: document.getElementById('input_nama_kk').value,
@@ -411,9 +395,8 @@
};
try {
/* Baris Kompleks: Eksekusi transmisi data asinkron via HTTP POST menuju endpoint server.
Header 'Content-Type' diset ke JSON agar dapat dibaca oleh middleware express.json() di backend. */
const http_response = await fetch('http://localhost:3000/api/survey/submit', {
// Diubah ke relative path
const http_response = await fetch('/api/survey/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload_survei)