2011-09-04 19 views
55

सर्वर के अनुरोध के उत्तर देने से पहले त्रुटि से पहले ब्राउज़र कितनी देर तक प्रतीक्षा कर सकता है? क्या यह समय असीमित हो सकता है?AJAX अनुरोध के बाद ब्राउज़र कब तक प्रतीक्षा करेगा?

+2

सुनिश्चित करें कि आप क्या प्रयोग कर रहे हैं, लेकिन हाँ आप टाइमआउट विस्तार कर सकते हैं नहीं। अनंत तक, मुझे नहीं पता। हालांकि मैं असीमित समय के खिलाफ सिफारिश करेंगे। यदि आपको आवश्यकता है, तो आप इसे हमेशा 90 सेकंड या थोड़ी देर तक कुछ सेट कर सकते हैं। यदि यह 30 सेकंड से अधिक समय लेता है, तो शायद कुछ करने का एक बेहतर, तेज़ तरीका है। – Matt

+1

+1 - मैं इसके बारे में भी उत्सुक हूं। मुझे संदेह है कि आपको क्लाइंट टाइमिंग के बारे में चिंता करने की ज़रूरत है। इस पर आपका कोई नियंत्रण नहीं है। एक Google खोज ने इसे चालू कर दिया। यह मूल रूप से कहता है कि या तो सर्वर या ब्राउज़र आप पर समय निकाल सकता है। इसलिए मैं कुछ चुनूंगा जो सभी ब्राउज़रों के लिए डिफ़ॉल्ट नहीं होगा। http://support.microsoft.com/kb/813827 – mrtsherman

+0

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

उत्तर

62

यदि आप एक jQuery $ .ajax कॉल का उपयोग कर रहे हैं तो आप टाइमआउट स्थिति के साथ अनुरोध लौटने से पहले समय की मात्रा को नियंत्रित करने के लिए टाइमआउट प्रॉपर्टी सेट कर सकते हैं। टाइमआउट मिलीसेकंड में सेट है, इसलिए इसे एक बहुत ही उच्च मूल्य पर सेट करें। आप इसे "असीमित" के लिए भी 0 पर सेट कर सकते हैं लेकिन मेरी राय में आपको इसके बजाय एक उच्च मान निर्धारित करना चाहिए।

नोट: असीमित actually the default है लेकिन अधिकांश ब्राउज़रों में डिफ़ॉल्ट टाइमआउट होता है जो हिट हो जाएगा।

जब टाइमआउट के कारण एक AJAX कॉल वापस कर दिया जाता है तो यह "टाइमआउट" की त्रुटि स्थिति के साथ वापस आ जाएगा, यदि आवश्यक हो तो आप एक अलग मामले के साथ संभाल सकते हैं।

तो तुम 3 सेकंड तक समाप्ति सेट, और यहाँ टाइमआउट को संभालने के लिए चाहते हैं, तो एक उदाहरण है:

$.ajax({ 
    url: "/your_ajax_method/", 
    type: "GET", 
    dataType: "json", 
    timeout: 3000, //Set your timeout value in milliseconds or 0 for unlimited 
    success: function(response) { alert(response); }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     if(textStatus==="timeout") { 
      alert("Call has timed out"); //Handle the timeout 
     } else { 
      alert("Another error was returned"); //Handle other error type 
     } 
    } 
});​ 
+5

'टाइमआउट' मान को '0' पर सेट करना AJAX टाइमआउट को अनिश्चित अवधि (असीमित पढ़ें) पर सेट करता है। – John

+0

@ जॉन या इसे बिल्कुल भी सेट नहीं करना (पढ़ना 0 डिफ़ॉल्ट है)। –

+0

मुझे टेक्स्टस्टैटस में "त्रुटि" नहीं मिल रहा है "टाइमआउट" – UmaShankar

3

क्या आप जो हासिल करने की कोशिश कर रहे हैं उसके बारे में कुछ और बता सकते हैं - क्या आपके पास सर्वर पर लंबी चल रही प्रक्रिया है, क्या आप केवल स्थानीय मशीन पर सेटिंग्स बदलना चाहते हैं या आप प्रबंधित करने के तरीके के बाद हैं यह बड़ी संख्या में उपयोगकर्ताओं के लिए है?

ब्राउज़र कितने समय तक इंतजार करेगा, कई कारकों पर निर्भर करता है उदा। जहां टाइमआउट होता है - क्या यह टीसीपी स्तर, सर्वर या स्थानीय ब्राउज़र पर है?

यदि आपके पास सर्वर पर लंबी चल रही प्रक्रिया है और आप बाद में एक वेबपृष्ठ अपडेट करना चाहते हैं तो इसे संभालने के सामान्य तरीके को लंबी प्रक्रिया को अतुल्यकालिक रूप से चलाने और ग्राहक पूर्ण होने पर सूचित करना है। एक AJAX कॉल है जो सर्वर को मतदान करता है, या HTTP 1.1 का उपयोग करता है और क्लाइंट को अधिसूचना स्ट्रीम प्रदान करता है।

किसी भी मामले में कनेक्शन बंद होने के लिए अभी भी संभव है, इसलिए ग्राहक को इसे फिर से खोलने की क्षमता की आवश्यकता होगी।

14

हां और नहीं। हां सर्वर ऐसा कर सकता है या ऐसा करने के लिए कॉन्फ़िगर किया जा सकता है, कोई ब्राउज़र नहीं (मुझे संस्करण/वितरक विनिर्देशों के बारे में पता नहीं है) में टाइमआउट सक्षम हो सकता है।

2 समाधान कर रहे हैं, हालांकि प्राप्त करने/HTTP पर इस नकल के लिए:

  • इस सरल एक लंबी चलने वाली स्क्रिप्ट और आप इस जाने का रास्ता नहीं है परिणामों के लिए इंतज़ार कर रहे हैं, तो आप के बजाय के रूप में करना चाहिए पिछले पोस्टर का उल्लेख किया गया है और परिणामों के लिए सर्वर मतदान के साथ एसिंक प्रोसेसिंग का उपयोग करें, यह एक और अधिक निश्चित अग्नि समाधान होगा। उदाहरण के लिए: एक छवि प्रोसेसर सर्वर पक्ष से एक थंबनेल स्क्रिप्ट: उपयोगकर्ता एक छवि अपलोड करता है जो सर्वर को 200 और एक "जॉब आईडी" देता है। ग्राहक (जावास्क्रिप्ट ^^) नौकरी की स्थिति/परिणाम का अनुरोध करने के लिए जॉबआईडी का उपयोग कर सकते हैं।
  • यदि आपका लक्ष्य ब्राउज़र और सर्वर के बीच रीयलटाइम कनेक्शन की तरह कुछ है (1 रास्ता कनेक्शन, ब्राउज़र द्वारा अनुरोध किए जाने के बाद कोई और जानकारी नए अनुरोधों (AJAX ^^) के बिना भेजा जा सकता है), यह है लंबे मतदान/रिवर्स AJAX कहा जाता है और http पर वास्तविक समय संचार के लिए इस्तेमाल किया जा सकता है। समानांतर में 2 लंबे सर्वेक्षण किए गए अनुरोधों का उपयोग करके कई तकनीकें हैं ताकि उनमें से एक बार टाइमआउट सक्रिय हो जाए और दूसरा पुन: कनेक्ट करने का प्रयास कर सके।
+1

ग्रेट प्रतिक्रिया, धन्यवाद –

2

मुझे पता चला कि सामान्य (HTML पृष्ठ) अनुरोध के मामले में, ब्राउज़र सीसीए के बाद टाइमआउट पर चलाते हैं। 30 सेकेंड यह महत्वपूर्ण है, क्योंकि अन्य प्रतिभागी शायद इसका अनुसरण करते हैं: प्रॉक्सी, राउटर (राउटर इस गेम में खेलते हैं? मुझे यकीन नहीं है)। मैं 4 सेकंड लंबी सर्वर-साइड देरी (यदि क्लाइंट को भेजने के लिए कुछ भी नहीं है) का उपयोग कर रहा हूं, और मेरा AJAX क्लाइंट तुरंत एक और HTTP अनुरोध करता है (मैं स्थानीय नेटवर्क पर हूं, इंटरनेट इंटरनेट नहीं है)। 4 सेकंड लंबे समय तक पर्याप्त मतदान के साथ सर्वर और नेटवर्क को अधिभारित नहीं करने के लिए काफी लंबा है, और मामले के लिए पर्याप्त छोटा है, जब किसी भी तरह से एक सर्वेक्षण पंक्ति से बाहर निकलता है जिसे ग्राहक पहचान और संभाल नहीं सकता है।

इसके अलावा, धूमकेतु (लंबे HTTP अनुरोध) के साथ अन्य समस्याएं हैं: एक साथ HTTP अनुरोध की संख्या पर ब्राउज़र की सीमा, क्लाइंट-साइड इवेंट्स को संभालना (तुरंत सर्वर पर भेजा जाना चाहिए), सर्वर/नेटवर्क डाउन डिटेक्शन और रिकवरी , बहु उपयोगकर्ता हैंडलिंग इत्यादि

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