ฉันต้องแน่ใจว่าเมื่อมีคนโหลดซ้ำหรือปิดเพจของฉัน ความคืบหน้าของพวกเขาจะถูกบันทึกไว้ เพื่อบันทึกความคืบหน้า ฉันทำการ POST
ผ่าน XMLHttpRequest()
โดยส่งข้อมูลไปยังเซิร์ฟเวอร์ ฉันกำลังเรียกใช้ฟังก์ชัน saveData()
นี้ภายในเหตุการณ์ window.onbeforeunload
ปัญหาคือ saveData()
ทำการคำนวณบางอย่าง จากนั้นจึงเรียก sendData(content)
เพื่อ POST ข้อมูลจริงในที่สุด และหากข้อมูลที่ฉันกำลังประมวลผลและส่งมีขนาดใหญ่ (>100kB) หน้าต่างดูเหมือนจะปิดลงก่อนที่ข้อมูลทั้งหมดจะถูกส่งไปยังเซิร์ฟเวอร์ (กำลังส่งภาพอยู่ครับ บางทีก็อีกฝั่งได้แค่ครึ่งเดียว)
คำขอ http เป็นแบบซิงโครนัส xhr.open("POST", url, false)
แต่ดูเหมือนจะไม่ลดทอนลง
ดังนั้นคำถามของฉันคือ ฉันจะรักษาฟังก์ชัน onbeforeunload ไม่ให้ยุติได้อย่างไร UNTIL xhr.readyState == 4
ฉันจะทำให้รอเหตุการณ์นั้นได้อย่างไร?
โอ้ และ setTimeout()
จะไม่ทำงาน หน้าต่างจะปิดก่อน "เวลา" จะมาถึง
สิ่งนี้จะไม่ทำงาน:
if (!jQuery) {
setTimeout(attachCode, 100);
return;
} else {
// continue and close
}
ขอบคุณสำหรับข้อมูลเชิงลึก!
PS: นี่ไม่ควรเป็น "แนวทางปฏิบัติที่ไม่ดี" เนื่องจากใช้เวลาเพียงไม่กี่วินาที และฉันไม่ต้องการให้ผู้ใช้บันทึกด้วยตนเอง นอกจากนี้ การบันทึกในขณะที่เขาทำงาน (เช่น ก่อนที่เขาจะปิดหน้าต่าง) จะทำให้แอปช้าลง ดังนั้นฉันจึงทำอย่างนั้นไม่ได้
[แก้ไข] เพื่อเป็นมาตรการชั่วคราว ฉันหันไปใช้ เคล็ดลับนี้ เพื่อบันทึกข้อมูลอัตโนมัติหากผู้ใช้ตัดสินใจที่จะอยู่ในหน้านั้นต่อไป อย่างไรก็ตาม ฉันไม่ต้องการใช้ข้อความแจ้งเตือนใดๆ เลย :(