कभी-कभी आप सर्वर को यह बताना चाहते हैं कि उपयोगकर्ता पृष्ठ छोड़ रहा है। यह उपयोगी है, उदाहरण के लिए, सर्वर पर अस्थायी रूप से संग्रहीत सहेजे न गए चित्रों को साफ करने के लिए, उस उपयोगकर्ता को "ऑफ़लाइन" के रूप में चिह्नित करने के लिए, या जब वे अपना सत्र पूरा करने के लिए लॉग इन करें।
ऐतिहासिक रूप से, आप beforeunload
फ़ंक्शन में AJAX अनुरोध भेजेंगे , हालांकि इसमें दो समस्याएं हैं। यदि आप एक अतुल्यकालिक अनुरोध भेजते हैं, तो इस बात की कोई गारंटी नहीं है कि अनुरोध सही तरीके से निष्पादित किया जाएगा। यदि आप एक तुल्यकालिक अनुरोध भेजते हैं, तो यह अधिक विश्वसनीय है, लेकिन अनुरोध समाप्त होने तक ब्राउज़र लटका रहेगा। यदि यह एक धीमी गति से अनुरोध है, तो यह उपयोगकर्ता के लिए एक बड़ी असुविधा होगी।
सौभाग्य से, अब हमारे पास है navigator.sendBeacon()
। sendBeacon()
विधि का उपयोग करके , डेटा को वेब सर्वर पर अतुल्यकालिक रूप से प्रेषित किया जाता है जब उपयोगकर्ता एजेंट के पास ऐसा करने का अवसर होता है, बिना किसी देरी के या अगले नेविगेशन के प्रदर्शन को प्रभावित किए बिना। यह विश्लेषण डेटा प्रस्तुत करने के साथ सभी समस्याओं को हल करता है: डेटा मज़बूती से भेजा जाता है, इसे एसिंक्रोनस रूप से भेजा जाता है, और यह अगले पृष्ठ के लोड को प्रभावित नहीं करता है। यहाँ इसके उपयोग का एक उदाहरण है:
window.addEventListener("unload", logData, false);
function logData() {
navigator.sendBeacon("/log.php", analyticsData);
}
sendBeacon()
में समर्थित है:
- धार १४
- फ़ायरफ़ॉक्स ३१
- क्रोम 39
- सफारी 11.1
- ओपेरा 26
- iOS सफारी 11.4
यह वर्तमान में समर्थित नहीं है:
- इंटरनेट एक्स्प्लोरर
- ओपेरा मिनी
यदि आपको असमर्थित ब्राउज़रों के लिए समर्थन जोड़ने की आवश्यकता है, तो यहां sendBeacon () के लिए एक पॉलीफ़िल है। यदि विधि ब्राउज़र में उपलब्ध नहीं है, तो इसके बजाय एक तुल्यकालिक AJAX अनुरोध भेजेगा।