2014-07-21 10 views
5

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

वर्तमान में मेरे पास सभी आइटम "लोड हो रहा है ..." के रूप में दिखाए जाते हैं, फिर धीरे-धीरे अनुरोधों को पूरा करने के रूप में बदल दिया जाता है।

ब्राउज़र द्वारा निर्धारित सीमाओं के कारण, उनमें से केवल पांच में से केवल वास्तव में किसी भी समय लोड होता है, अन्य लोगों को पहले तक पूरा होने तक अवरुद्ध कर दिया जाता है।

मैं जानना चाहता हूं कि ब्लॉक समाप्त होने पर पता लगाने का कोई तरीका है या अनुरोध वास्तव में भेजा जाता है। जब तक यह पूरा हो गये, इस समय मैं तत्काल उत्तराधिकार (ध्यान दें कि परीक्षण के लिए, AJAX प्रतिक्रियाएं हैं 2, 3 और 4 प्राप्त किसी भी स्थिति निकाल दिया जाता है -

प्रारंभिक onreadystatechange का उपयोग कर 4 के अलावा अन्य readyState मूल्यों पता लगाने के लिए परीक्षण का वादा नहीं कर रहे हैं कृत्रिम रूप से usleep आईएनजी द्वारा यादृच्छिक समय के लिए देरी हुई)

कोई विचार? या अवरुद्ध भाग को मैन्युअल रूप से कार्यान्वित करने का मेरा एकमात्र असली विकल्प है?

+0

आपका मतलब है कि ब्राउज़र अवरुद्ध कर रहा है; आप जंगली में 10 अनुरोध फेंकते हैं और ब्राउजर केवल 5 में से समानांतर में आने की इजाजत देता है और शेष को पकड़ में रखा जाता है। यदि आपको कोई प्रासंगिक उत्तर नहीं मिलता है, तो आपको खुद को एक कतार बनाना पड़ सकता है ताकि आप उचित समय पर अनुरोध शुरू कर सकें। एक अंतिम उपाय समाधान के रूप में। – Gimby

+0

क्या आप सत्यापित कर सकते हैं (आपके नेटवर्क मॉनीटर के माध्यम से) कि प्रतिक्रियाओं को वास्तव में प्रत्येक 'तैयार चरण' संक्रमण को अलग करने के लिए काफी देरी हो रही है? – svidgen

+0

@ स्विसजन: मैंने 6 सेकंड की नींद के साथ AJAX लक्ष्य को मारकर इस बिंदु का परीक्षण किया है। जैसा कि 6 सेकंड के बाद लगातार 2,3,4 ट्रिगर हुआ। यहां [एक डेमो फीडल] है (http://jsfiddle.net/2nWCq/)। – mithunsatheesh

उत्तर

-3

आप jQuery समारोह का उपयोग कर सकते कॉल करने के लिए ajax request.It एकाधिक अनुरोध समानांतर और प्रतिक्रिया जैसे ही मिलता है भेजने के लिए बेहतर है ..

+2

ऐसा लगता है कि ऐसा लगता है कि jQuery में कोड लिखना * जादूगर रूप से ब्राउज़र को एक साथ अनुरोधों को संभालता नहीं है, न ही मुझे बताता है कि अनुरोध अवरुद्ध होने और चलने लगने पर मुझे बताएं। मुझे सही पता है?किसने सोचा होगा कि jQuery ने सादे जावास्क्रिप्ट के समान सीमाएं साझा की हैं ... –

2

इस आप वास्तव में प्राप्त कर सकते हैं का सबसे अच्छा सन्निकटन readyState "के लिए देखने के लिए है 1 ".. जो सर्वर कनेक्शन को इंगित करता है स्थापित किया गया है। इससे आपको बहुत करीब अनुमान मिलेगा कि वास्तव में कनेक्शन कब लाइव हो गया था।

मैंने http://jsfiddle.net/r0gknr3w/ पर हैक किया है। बस जेएस कंसोल देखें, और आप "1" लॉग इन देखेंगे। आप कहते हैं कि आपने कभी तैयार 1 नहीं देखा ... लेकिन यह निश्चित रूप से वहां है।

var xhr = $.ajax({ 
    url: "/echo/html", 
    xhr: function() { 
     var xhr = new XMLHttpRequest(); 
     xhr.onreadystatechange = function() { 
      console.log(xhr.readyState); 
     } 
     return xhr; 

    } 
}); 
+0

एचएम, रोचक ... मुझे केवल '1' लॉग मिल रहा है ... और मुझे इसे दो बार मिल रहा है। जब मैंने अपने परीक्षण चलाए, तो मैंने केवल आईई में लॉग इन होने पर '1' दिखाई दिया, क्रोम इसे पूरी तरह से छोड़ दिया। साथ ही, जब प्रतिक्रिया में देरी हो जाती है, तो आईई में तुरंत '1' लॉग होता है, इसके बाद लॉक प्रतीक्षा, फिर तत्काल उत्तराधिकार में' 234'। –

+0

मैं हर बार उत्तराधिकार में "1,2,4" देख रहा हूं। – joeltine

संबंधित मुद्दे