2009-03-05 16 views
8

पर कॉल करते समय 5 मिनट तक लटका है मेरे पास एक वेब एप्लिकेशन है और डेटा लाने के लिए मेरे वेबसर्वर पर वापस कॉल करने के लिए AJAX का उपयोग करें।आईई सिंक्रोनस xmlhttprequest

कभी कभी (कम से बल्कि अप्रत्याशित क्षणों, लेकिन यह reproduced किया जा सकता है) आईई 5 मिनट के लिए पूरी तरह से लटका हुआ है (विंडो प्रतिसाद नहीं कहते हैं) और फिर वापस आता है और XMLHttpRequest ऑब्जेक्ट त्रुटि 12002.

तरह से मैं के साथ प्रतिक्रिया इस प्रकार पुन: उत्पन्न कर सकते हैं। मुख्य विंडो (ए) का उपयोग करते हुए बटन

  • खिड़की एक से

    1. ओपन खिड़की (बी) तुल्यकालिक ajax (PROC1) जब बटन खोलने के लिए विंडो बी PROC1 चलाता फ़ाइल क्लिक किया जाता है कहता है।
    2. नई विंडो (बी) में AJAX कोड (PROC2) है और सर्वर को अतुल्यकालिक कहते हैं। ठीक है
    3. उपयोगकर्ता प्रोसी 2 पूरा होने के बाद विंडो बी बंद कर देता है लेकिन डेटा लौटाए जाने से पहले।
    4. मुख्य विंडो में (ए) उपयोगकर्ता फिर से क्लिक बटन। प्रोसी 1 फिर से चलता है लेकिन अब 5 मिनट के लिए भेजें() कॉल ब्लॉक।

    कृपया मदद करें। मैं 3 दिनों की तलाश में हूं।

    कृपया ध्यान दें: * मैं यह फ़ायरफ़ॉक्स में परीक्षण नहीं कर सकते * मैं तुल्यकालिक कॉल (उस तरह से अनुप्रयोग का निर्माण किया है है का उपयोग करने के है (एप्लिकेशन फ़ायरफ़ॉक्स संगत नहीं है) और यह बहुत ज्यादा डेवलपर ले जाएगा इसे फिर से लिखने का प्रयास)

    ऐसा क्यों होता है और मैं इसे कैसे ठीक करूं?

  • +0

    ; Windows अपडेट चलाएं .. uptodate रखने .. यह समस्या अपने आप के द्वारा हल हो जाता है .. अनुभव बोलता है - ... आपकी समस्या ... हल होगा नहीं लेकिन यकीन है कि गोली मार दी है , लेकिन 'एक्सचेंज' पर क्या चल रहा है, यह जानने के लिए प्रोसेस एक्सप्लोरर और प्रोसेस मॉनीटर का उपयोग करें हुड'? – Terry

    उत्तर

    1

    विनसॉक त्रुटि 12002 का मतलब निम्नलिखित msdn

    ERROR_INTERNET_TIMEOUT 
    
    12002 
    
    The request has timed out. 
    

    विनसॉक के अनुसार IE में XMLHTTP के लिए अंतर्निहित सॉकेट हस्तांतरण वस्तु इसलिए किसी भी त्रुटि HTTP त्रुटि रेंज (300,400,500 आदि) में नहीं thats है लगभग हमेशा एक विनसॉक है त्रुटि।

    आपके प्रश्न से स्पष्ट नहीं था कि एक ही संसाधन को दूसरी बार दौर में पूछताछ की जा रही है। यूआरएल जो इस मुद्दे को हल करने के लिए हो सकता है

    '?uid=+'Math.random() 
    

    : आप जोड़कर एक नया uncached संसाधन के लिए मजबूर कर सकता है।

    एक अन्य समाधान विंडो बी पर बंद होने से पहले किसी भी सक्रिय XMLHTTP अनुरोध को निरस्त करने के लिए विंडो ऑब्जेक्ट पर "onbeforeunload" ईवेंट में एक फ़ंक्शन संलग्न करना हो सकता है।

    आशा है कि ये 2 पॉइंटर्स आपकी बग को हल करें।

    2

    मार्टिजन का उत्तर देने के लिए धन्यवाद।

    यह मेरे मुद्दों को हल नहीं करता है। मुझे लगता है कि मैं क्या दिखाई दे रही है सबसे अच्छा इस वेबसाइट पर वर्णित है: http://bytes.com/groups/javascript/643080-ajax-crashes-ie-close-window

    मेरी स्थिति में मैं एक अस्थिर कनेक्शन या एक धीमी गति से वेबसर्वर और जब कनेक्शन बहुत धीमी है और ब्राउज़र और वेब सर्वर अभी भी एक कनेक्शन तो है जमा।

    7

    आप सही जैप हैं, यह इंटरनेट एक्सप्लोरर की कनेक्शन सीमा 2 से संबंधित है।किसी कारण से, आईई बंद विंडो में किए गए AJAX अनुरोधों से कनेक्शन जारी नहीं करता है।

    मैं केवल थोड़ा सरल एक बहुत ही इसी तरह की स्थिति है,:

    विंडो ए में
    • उपयोगकर्ता क्लिक करता है खिड़की बी को खोलने के लिए
    • विंडो बी एक अजाक्स कॉल कि थोड़ी देर अजाक्स कॉल रिटर्न से पहले
    • लेता करता है , उपयोगकर्ता विंडो बी को बंद करता है। इस कॉल के कनेक्शन "लीक"।
    • दोहराएँ 1 और अधिक समय तक दोनों कनेक्शन उपलब्ध "लीक" कर रहे हैं
    • ब्राउज़र XMLHTTP निरस्त करने के लिए हो जाता है अनुत्तरदायी

    एक तकनीक तुम कोशिश कर सकते (लेख आपको पाया में उल्लेख किया है) काम प्रतीत होता है कि पृष्ठ की अनलोड घटना में अनुरोध करें।

    तो कुछ की तरह:

    var xhr = null; 
    
    function unloadPage() { 
        if(xhr !== null) { 
        xhr.abort(); 
        } 
    } 
    

    एक अन्य विकल्प तुल्यकालिक AJAX कॉल, जो कॉल रिटर्न जब तक अवरुद्ध कर देगा, अनिवार्य रूप से ब्राउज़र ताला उपयोग करने के लिए है। यह आपकी विशेष स्थिति के अनुसार स्वीकार्य हो सकता है या नहीं भी हो सकता है।

    // the 3rd param is whether the call is asynchronous 
    xhr.open('get', 'url', false); 
    

    अंत में, के रूप में कहीं उल्लेख किया है, आप IE रजिस्ट्री में उपयोग करता कनेक्शन की अधिकतम संख्या को समायोजित कर सकते हैं। ऐसा करने के लिए आपकी साइट पर आगंतुकों की अपेक्षा करना यथार्थवादी नहीं है, और यह वास्तव में समस्या को हल नहीं करेगा - बस इसे होने में देरी करें। साइड-नोट के रूप में, आईई 8 6 समवर्ती कनेक्शन की अनुमति दे रहा है।

    +0

    मैंने AJ8 में AJAX के साथ एक बहुत ही समान समस्या को ठीक करने और विंडोज़ खोलने और बंद करने के लिए एक निरस्त समाधान का उपयोग किया। हालांकि, प्रतिक्रिया को निरस्त करने और खोने के लिए मैं देख रहा था कि मुझे एसिंक का उपयोग करना पड़ा: jQuery में झूठा। यह मेरे मामले में ठीक था, लेकिन स्पष्ट रूप से आदर्श नहीं है। हालांकि, निरस्त करने से खाली नई विंडोज़ समस्या हल हो गई। थोड़ी अधिक जानकारी के लिए http://stackoverflow.com/questions/446594/kill-ajax-requests-using-javascript-using-jquery में मेरी टिप्पणी देखें। –

    2

    डिफ़ॉल्ट रूप से इंटरनेट एक्सप्लोरर केवल डाउनलोड उद्देश्यों के लिए एक ही वेबसाइट पर दो समवर्ती कनेक्शन की अनुमति देता है। यदि आप इससे अधिक कोशिश करते हैं और आग लगाते हैं, आईई। स्टालों को तब तक पूरा नहीं किया जाता जब तक कि अगला अनुरोध पूरा नहीं हो जाता है। मुझे विश्वास है (हालांकि मैं गलत हो सकता था) यह एक समय में कई समवर्ती डाउनलोड के साथ वेबसाइटों को अधिभारित करने से रोकने के लिए रखा गया था। इस लॉक को रोकने के लिए एक रजिस्ट्री हैक है।

    मैं इन निर्देशों इंटरनेट जो अपनी समस्याओं के निवारण के आसपास लात पाया - मैं इसे अपनी स्थिति के लिए काम करेंगे वादा नहीं कर सकता, लेकिन बहु कनेक्शन की सीमा आप देख रहे हैं प्रकट होता है संबंधित:

    1. स्टार्ट बटन पर क्लिक करें और रन का चयन करें।
    2. रन लाइन प्रकार Regedt32.exe पर और एंटर दबाएं। इस लांच रजिस्ट्री संपादक
    3. रजिस्ट्री में निम्न कुंजी का पता लगाएँ होगा: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
    4. इंटरनेट रूपरेखा कुंजी पर क्लिक करें।
    5. अब इस DWORD मान के नाम के लिए संपादित करें मेनू, नई
    6. क्लिक DWORD मान
    7. प्रकार MaxConnectionsPer1_0Server को बात करने के लिए जाना।
    8. पर डबल-क्लिक करें MaxConnectionsPer1_0 सर्वर कुंजी जो आपने अभी बनाई है और निम्न जानकारी दर्ज करें: मान डेटा: 10. आधार: दशमलव।
    9. जब समाप्त हो गया ठीक है दबाएं।
    10. दोहराएँ 9. के माध्यम से चरण 4 इस बार कुंजी MaxConnectionsPerServer नामकरण और यह बताए ही मान के रूप में कदम 8.
    11. में संकेत जब ठीक
    12. प्रेस समाप्त रजिस्ट्री संपादक को बंद करें।
    बेशक

    , मैं बीच में बंद करें() कॉल जैसा कि पहले उल्लेख के साथ संयोजन के रूप में इन का प्रयोग करेंगे। संक्षेप में, उन्हें इस मुद्दे को ठीक करना चाहिए।

    2

    आईई 5 और आईई 6, वास्तव में, PHP स्क्रिप्ट से डेटा प्राप्त करने का प्रयास करते समय लटकाते हैं। कारण यह है कि ये ब्राउज़र तय नहीं कर सकते कि सभी डेटा कब प्राप्त हुए हैं और कनेक्शन बंद किया जा सकता है। तो वे कनेक्शन समाप्त होने तक प्रतीक्षा करते हैं (इस प्रकार 5 या 10 मिनट लटका)। इसका समाधान करने का एक तरीका ब्राउज़र को यह बताना है कि यह कितना डेटा प्राप्त करेगा। PHP में आपको लगता है कि उत्पादन बफरिंग का उपयोग कर, उदाहरण के लिए इस प्रकार कर सकते हैं:

    ob_start(); 
    echo $html_content; 
    header('Connection: close'); 
    header('Content-Length: '.ob_get_length()); 
    flush(); 
    ob_end_flush(); 
    

    यह एक समाधान है जब एक सिर्फ एक सामान्य वेब पेज लोड कर रहा है है। जब एक AJAX Microsoft.XMLHTTP के माध्यम से प्राप्त उपयोग कर रहा है यह पर्याप्त है आपत्ति को भेजें "कनेक्शन: बंद" GET अनुरोध के साथ शीर्ष, जैसे

    r.request.open("GET", url, true); 
    r.request.setRequestHeader("Connection", "close"); 
    r.request.send(); 
    
    0

    इन सभी पदों - पीडीएफ रीडर अक्षम करें .. और कहा कि सामान बस एक सुझाव)

    HydTechie