2009-06-02 20 views
25

मेरे पास कुछ (संभावित रूप से) लंबे समय से चल रहे AJAX कॉल हैं जो उपयोगकर्ता को किसी अन्य पृष्ठ पर नेविगेट करने पर रोकना चाहते हैं। निम्नलिखित jQuery कोड कॉल पृष्ठ से दूर नेविगेट पर सभी लंबित XMLHttpRequest वस्तुओं पर गर्भपात:ब्राउज़र निरस्त करने के बाद भी AJAX कॉल के लिए इंतजार कर रहा है (jQuery)

$.ajaxSetup({ 
    beforeSend: function(xhr) { 
     $(window).bind('beforeunload', function() { 
      xhr.abort(); 
     }); 
    } 
}); 

एक परीक्षण मामले में, मुझे बुलाया जा रहा है सर्वर साइड संचालन पर एक 10 सेकंड प्रतीक्षा बाध्य करते हैं। फायरबग का उपयोग करके, मैंने पुष्टि की है कि उपरोक्त कोड वास्तव में सभी लंबित AJAX कॉल का कारण बनता है जब मैं पृष्ठ पर किसी भी लिंक पर क्लिक करता हूं। हालांकि, ब्राउज़र अभी भी अगले पृष्ठ पर जाने से पहले पूर्ण 10 सेकंड प्रतीक्षा करता है। आईई एक ही व्यवहार प्रदर्शित करने के लिए प्रतीत होता है। क्या यह एक ज्ञात ब्राउज़र व्यवहार है? क्या ऐसी कोई चीज है जो मैं उपयोगकर्ता को इस स्थिति में तुरंत पृष्ठ से दूर जाने की अनुमति दे सकता हूं? अग्रिम में धन्यवाद।

+0

अजाक्स कॉल कैसा दिखता है? – epascarello

उत्तर

27

अपने उत्तर के लिए धन्यवाद! यह पता चला कि मैं ब्राउज़र समस्या होने के बारे में पूरी तरह से गलत था - समस्या सर्वर पर थी। एएसपी.नेट उसी सत्र के अनुरोधों को क्रमबद्ध करता है जिसके लिए सत्र स्थिति की आवश्यकता होती है, इसलिए इस मामले में, अगला पृष्ठ तब तक सर्वर पर प्रसंस्करण शुरू नहीं कर रहा जब तक कि उन AJAX-आरंभ किए गए अनुरोध पूर्ण नहीं हो जाते।

दुर्भाग्य से, इस मामले में, http हैंडलर में सत्र स्थिति की आवश्यकता होती है जो AJAX कॉल का जवाब देती है। लेकिन केवल पढ़ने योग्य पहुंच पर्याप्त है, इसलिए आईआरक्वॉर्स सत्र स्थिति के बजाय हैंडलर को आईआरएडऑनली सत्र स्टेटस के साथ चिह्नित करके, सत्र ताले नहीं रखे जाते हैं और समस्या ठीक हो जाती है।

आशा है कि यह जानकारी दूसरों के लिए उपयोगी साबित होगी।

+2

मुझे इस तरह का सिरदर्द था, बहुत बहुत धन्यवाद! – Pablo

+0

आपके पास कोई संदर्भ है जो इसे अधिक जानकारी में बताता है? – Phil

+0

@ फिल, मुझे एएसपी.नेट के साथ इस समस्या के बारे में अधिक जानकारी मिली: http://johnculviner.com/asp-net-concurrent-ajax-requests-and-session-state-blocking/ –

2

क्या आप वाकई एक अचूक अनुरोध का उपयोग कर रहे हैं? पूरे अनुरोध के दौरान ब्राउज़र ब्लॉक, आप एक तुल्यकालिक अनुरोध उपयोग कर रहे हैं

+0

सर्वर वास्तव में नेविगेशन को रोक रहा है क्योंकि जिस पृष्ठ पर वह नेविगेट करना चाहता है, उसी सत्र का उपयोग करता है जो AJAX अनुरोध चल रहा है और सत्र में हो रहा है। – grantwparks

3

आप) बीच में बंद करें की एक अजीब पक्ष प्रभाव (

जांच करना चाह सकते (async पैरामीटर गलत है) जब बीच में बंद करें() विधि का उपयोग किया जाता है, तैयारस्टेस्टेशन घटना एक्सप्लोरर और मोज़िला में आग लगती है। बदतर, readyState = 4, जिसका अर्थ है कि औसत xmlhttp स्क्रिप्ट मानता है कि डेटा सही ढंग से लोड किया गया है। यह बहुत अजीब प्रभाव दे सकता है।

यहाँ प्रलेखित:

http://www.quirksmode.org/blog/archives/2005/09/xmlhttp_notes_a_1.html

1

सर्वर समस्या अपाचे/PHP सर्वर के साथ भी मामला है जिसके साथ मैं काम कर रहा हूं। Session_start को उस स्क्रिप्ट पर हटा दिया गया जिसकी आवश्यकता नहीं थी (AJAX) और सबकुछ अपेक्षित के रूप में काम कर रहा है। टोड के लिए धन्यवाद जिन्होंने एक ऐसी समस्या की ओर इशारा किया!

9

इस सवाल का टोड के अपने जवाब के बारे में ...

मैं सिर्फ PHP और एक ही समाधान काम किया है | साथ इस मुद्दे पर था। हालांकि मुझे सत्र में जानकारी की आवश्यकता थी। PHP डेवलपर्स के लिए आप अनुरोध के बीच में अपना सत्र बंद करने और लिखने के लिए session_write_close() पर कॉल कर सकते हैं। यह अन्य अनुरोधों के लिए सत्र को मुक्त कर देगा।स्वीकार किए जाते हैं जवाब देने के लिए

+1

बहुत बहुत धन्यवाद। मुझे conccurent अनुरोध के लिए सर्वर द्वारा आयोजित सत्र के बारे में भी पता नहीं था जब तक session_write_close() का उल्लेख न करें। यह सब समझ में नहीं आता है। –

+1

दिन बचाया .. धन्यवाद दोस्त ... –

+0

@acdameli मुझे अपने कार्यों में session_write_close() को कॉल करना चाहिए जो समस्या पैदा कर रहा है या जिसे बाद में –

0

संदर्भ:

http://improve.dk/optimizing-performance-programmatically-setting-readonlysessionstate/

बारे IRequiresSessionState

कि किसी दी गई सत्र के लिए, एक ही अनुरोध समवर्ती निष्पादित कर सकते हैं इसका मतलब है। किसी भी अन्य अनुरोध, उसी सत्र से, सत्र को जारी करने के लिए प्रतीक्षा कर रहे हैं,

+0

कहा जाता है, जबकि यह लिंक प्रश्न का उत्तर दे सकता है, तो आवश्यक भागों को शामिल करना बेहतर है यहां उत्तर का और संदर्भ के लिए लिंक प्रदान करें। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – Rajesh