Saya perlu memastikan bahwa ketika seseorang memuat ulang atau menutup halaman saya, kemajuannya disimpan. Untuk menyimpan kemajuan, saya melakukan POST
melalui XMLHttpRequest()
, mengirimkan data ke server. Saya memicu fungsi saveData()
ini di dalam acara window.onbeforeunload
.
Masalahnya adalah, saveData()
melakukan beberapa perhitungan, dan kemudian memanggil sendData(content)
untuk akhirnya benar-benar POST datanya. Dan jika data yang saya proses & kirim berukuran besar (>100kB), jendelanya sepertinya tertutup sebelum semua data sampai ke server. (Saya mengirim gambar, dan terkadang saya hanya mendapatkan setengahnya di sisi lain)
Permintaan http sinkron, xhr.open("POST", url, false)
, tapi sepertinya itu tidak cukup.
Jadi pertanyaan saya adalah, bagaimana caranya agar fungsi onbeforeunload tidak berhenti, SAMPAI xhr.readyState == 4
? Bagaimana cara membuatnya menunggu acara itu?
Oh, dan setTimeout()
tidak akan berfungsi. Jendela akan ditutup sebelum "Waktu" tiba.
Ini tidak akan berhasil:
if (!jQuery) {
setTimeout(attachCode, 100);
return;
} else {
// continue and close
}
Terima kasih atas wawasannya!
PS: ini seharusnya bukan "praktik buruk" karena hanya membutuhkan beberapa detik dan saya tidak ingin pengguna harus menyimpan secara manual. Selain itu, menyimpan saat dia bekerja (seperti, sebelum dia menutup jendela), akan memperlambat aplikasi jadi saya tidak bisa melakukan itu.
[EDIT] Sebagai tindakan sementara, saya terpaksa menggunakan trik ini untuk menyimpan data secara otomatis jika pengguna memutuskan untuk tetap berada di halaman. Namun, saya benar-benar ingin tidak perlu menggunakan pesan peringatan apa pun. :(