मैं इस पर सीधा जवाब खोजने की कोशिश कर रहे वेब को खराब कर रहा हूं। क्या किसी को ब्राउज़र द्वारा AJAX अनुरोध के लिए डिफ़ॉल्ट टाइमआउट लंबाई पता है? संस्करण के साथ भी अगर यह बदल गया है?ब्राउज़र द्वारा AJAX (XmlHttpRequest) टाइमआउट लंबाई
उत्तर
मुझे नहीं लगता कि ब्राउज़र में AJAX के लिए टाइमआउट है, केवल सिंक्रोनस या असिंक्रोनस अनुरोध हैं; सिंक्रोनस - अनुरोध लौटने तक पहले जावास्क्रिप्ट निष्पादन को फ्रीज करता है, असीमित - जावास्क्रिप्ट निष्पादन को फ्रीज नहीं करता है, यह केवल निष्पादन प्रवाह से अनुरोध लेता है, और यदि आपके पास कॉलबैक फ़ंक्शन है तो यह चलने के साथ समानांतर में फ़ंक्शन निष्पादित करेगा स्क्रिप्ट (एक धागे के समान)
**sync flow:**
running JS script
|
ajax
(wait for response)
|
execute callback
|
running JS script
**async flow:**
running JS script
|
ajax --------------------
| |
running JS script execute callback
चश्मा के अनुसार, टाइमआउट मान शून्य पर डिफ़ॉल्ट होता है, जिसका अर्थ है कि कोई टाइमआउट नहीं है। हालांकि, आप XHR.timeout प्रॉपर्टी पर टाइमआउट मान सेट कर सकते हैं; मान मिलीसेकंड में है।
सूत्रों का कहना है:
http://www.w3.org/TR/2011/WD-XMLHttpRequest2-20110816/#the-timeout-attribute http://msdn.microsoft.com/en-us/library/cc304105(v=vs.85).aspx
ब्राउज़र एक टाइमआउट मान है, व्यवहार ब्राउज़र क्रोम पर निर्भर करता है 5 मिनट के टाइमआउट मान है और 5 मिनट के बाद इसे फिर से भेजें ajax कॉल
10 सेकंड के बाद मेरा टाइमआउट ..? – ppumkin
मैंने किया करता है परीक्षण की एक मामूली राशि। परीक्षण करने के लिए मैंने अपनी वेबसाइट लोड की, स्थानीय सर्वर को रोक दिया और फिर AJAX अनुरोध का प्रयास किया। मैं 1000ms की तरह कम कुछ करने के लिए timeout
सेट जब तक मैं यह सुनिश्चित कर सकता है मैं कम से कम कोड था (आप डाल चाहिए xhr.timeout
open
के बाद और से पहले send
)।
एक बार मैं यह काम कर रहा मेरी प्रारंभिक लक्ष्य मुझे आश्चर्य है कि कैसे जल्दी से timeout
एकमुश्त ब्राउज़र द्वारा नजरअंदाज कर दिया जाएगा था समय तथापि अनुमति देने के लिए की उचित मात्रा निर्धारित करने के लिए था मिल गया। मेरा लक्ष्य यह निर्धारित करने की कोशिश करने में सुधार हुआ कि अधिकतम टाइमआउट त्रुटि प्रबंधन से पहले नहीं हो सकता था। इसका मतलब है कि आपके टाइमआउट हैंडलर स्क्रिप्ट पर इन काफी कम अवधि के पिछले पर काम नहीं करेगा। जो मैंने पाया वह बहुत दयनीय था।
- क्रोम 60: 995ms, 996ms कंसोल में एक गंदे बुराई त्रुटि फेंक देगा।
- फ़ायरफ़ॉक्स 52 ईएसआर: ~ 3000 एमएमएस, माउस या अन्य समस्या की स्थिति किसी भी प्रतिक्रिया के आसपास या केवल तीन सेकंड के नीचे नहीं हो सकती है।
तो ...
xhr.open(method,url,true);
xhr.timeout = 995;//REALLY short
xhr.send(null);
xhr.ontimeout = function()
{
//Code will only execute if at or below *effective* timeouts list above.
//Good spot to make a second attempt.
}
इसलिए यदि आपके timeout
से अधिक 995ms क्रोम सेट किया गया है अपने कोड ध्यान न दें और अपने अच्छे साफ खाली सांत्वना है कि आप बहुत मेहनत की साफ रखने के लिए पर उल्टी होगा। फ़ायरफ़ॉक्स बहुत बेहतर नहीं है और अविश्वसनीय अनुरोध हैं कि मेरे पास किसी भी धैर्य से परे समय के लिए समय-समय पर और ontimeout
हैंडलर को अनदेखा कर रहा है।
लेकिन एक अंतर्निहित टाइमआउट है जो spec द्वारा कवर नहीं है। दूसरे लिंक से: 'यदि आप एक XMLHttpRequest टाइम-आउट मान सेट करते हैं जो नेटवर्क स्टैक के टाइम-आउट मान से बड़ा है, तो नेटवर्क स्टैक पहले समय समाप्त हो जाएगा और ऑनटाइम ईवेंट नहीं उठाया जाएगा। – djjeck