दिलचस्प पोस्ट
वेतन वृद्धि int वस्तु jquery: "$ (यह)" वास्तव में क्या मतलब है? शीर्षक वाली पंक्तियों और स्तंभों के साथ JTable क्या मानचित्रण के लिए गोल कोनों को कार्यान्वित करने का कोई तरीका है? मुख्य विधि के बिना आप जावा प्रोग्राम कैसे चला सकते हैं? एक मनमाना तिथि स्ट्रिंग को पहचानें मैं init / dealloc में उद्देश्य सी 2.0 एक्सेसर्स का उपयोग क्यों नहीं करना चाहिए? truncate बनाम delete mysql / sqlserver की तुलना सामग्री-प्रकार हैडर की परवाह किए बिना पायथन फ्लास्क में कच्चे POST बॉडी प्राप्त करें पायथन से पूरी तरह से स्वतंत्र प्रक्रिया लॉन्च करें एक स्ट्रिंग को अल्पविराम से विभाजित करें, लेकिन जावास्क्रिप्ट का उपयोग करके दोहरे उद्धरण चिह्नों में अल्पविराम को अनदेखा करें कोणीय 2 राउटर कोई आधार href सेट नहीं है "=>" PHP में क्या मतलब है? pthread_create का उपयोग करते समय valgrind स्मृति रिसाव त्रुटियाँ डायनामिक एसक्यूएल क्वेरी में टेबल नाम कैसे सेट करें?

सर्वर से पहले AJAX भेजें

तो माना जाता है कि फ़ायरफ़ॉक्स से शुरू 4> , खिड़की jQuery ऑब्जेक्ट को beforeunload करने से पहले beforeunload अब काम नहीं करता है।

मैं क्या करना चाहता हूं एक AJAX पोस्ट सबमिट करने के लिए मेरे सर्वर के मेमकैश डेटा को हटाने के लिए

जब मैं एकमात्र खुले टैब को रीफ़्रेश करता हूं, तो मैं देख सकता हूं कि beforeunload संदेश, "फ़ायरफ़ॉक्स / गैर-फ़ायरफ़ॉक्स डिलीट" से इसका सबूत मिलने के बाद से पहले कोड को फ़ायरफ़ॉक्स और क्रोम दोनों में कहा जाता है। समस्या यह है कि मुझे console.log संदेश "memcache delete" कभी नहीं दिखाई देता जो दर्शाता है कि मेरे सर्वर ने $.ajax अनुरोध कभी नहीं देखा।

मुझे पता है कि ब्राउज़र सूँघना करना बुरा है और यह कि अगर और अन्य वक्तव्य में क्या शामिल है, इसमें कोई अंतर नहीं है। मैं फ़ायरफ़ॉक्स में असफल रूप से कोशिश कर रहा हूँ, मैं सिर्फ कोड दिखा रहा हूँ

क्या किसी के भी पास कोई सुझाव है?

 $(window).bind('beforeunload', function(){ if(/Firefox[\/\s](\d+)/.test(navigator.userAgent) && new Number(RegExp.$1) >= 4) { console.log('firefox delete'); memcacheDelete(); return null; } else { console.log('NON-firefox delete'); memcacheDelete(); return null; } }); function memcacheDelete() { $.ajax({ url: "/memcache/delete", type: "post", data:{}, success:function(){ console.log('memcache deleted'); }//success }); //ajax } 

Solutions Collecting From Web of "सर्वर से पहले AJAX भेजें"

अजाक्स अतुल्यकालिक है

जब आप अपने ब्राउज़र को रीफ्रेश (या बंद) करते हैं, तो पहले beforeunload को बुलाया जा रहा है। और इसका मतलब है कि जैसे ही पहले के beforeunload को निष्पादित करना समाप्त हो जाता है, पृष्ठ रिफ्रेश (या बंद) होगा।

जब आप एक एजेक्स अनुरोध करते हैं, (इसके एसिंक्रोनस के बाद से) जावास्क्रिप्ट इंटरप्रेटर beforeunload success घटना के लिए इंतजार नहीं करता है और इसे निष्पादित करने से पहले आगे beforeunload

success की success को कुछ सेकेंड के बाद कहा जाने वाला माना जाता है, लेकिन आप इसे न देख पाए क्योंकि पेज रिफ्रेश किया गया है / बंद है

पक्षीय लेख:

.success() विधि को नापसंद किया गया है और इसे .done() विधि द्वारा प्रतिस्थापित किया गया है

संदर्भ

पूरा होने के लिए, यहां मैंने जो किया है, मार्गदर्शन के लिए @ जशवंत के लिए धन्यवाद: मैंने देखा कि इस अन्य एसयू क्यू एंड ए ने एक ही समाधान का सुझाव दिया कुंजी async:true(false) $.ajax कॉल में async:true(false) नीचे:

 $(window).bind('beforeunload', function(){ if(/Firefox[\/\s](\d+)/.test(navigator.userAgent) && new Number(RegExp.$1) >= 4) { console.log('firefox delete'); var data={async:false}; memcacheDelete(data); return null; } else { console.log('NON-firefox delete'); var data={async:true}; memcacheDelete(data); return null; } }); function memcacheDelete(data) { $.ajax({ url: "/memcache/delete", type: "post", data:{}, async:data.async, success:function(){ console.log('memcache deleted'); }//success }); //ajax }