XMLHttpRequest में विभिन्न रीडिस्टेट्स का क्या मतलब है, और मैं उनका उपयोग कैसे कर सकता हूं?


113

XMLHttpRequest5 readyStateएस है, और मैं केवल उनमें से 1 (पिछले एक 4) का उपयोग करता हूं ।

दूसरों के लिए क्या हैं, और मैं उन्हें किन व्यावहारिक अनुप्रयोगों में उपयोग कर सकता हूं?

जवाबों:


172

readyStateमूल्यों की पूरी सूची है:

State  Description
0      The request is not initialized
1      The request has been set up
2      The request has been sent
3      The request is in process
4      The request is complete

( https://www.w3schools.com/js/js_ajax_http_response.asp से )

व्यवहार में आप 4 को छोड़कर कभी भी उनमें से किसी का भी उपयोग नहीं करते हैं।

कुछ XMLHttpRequest कार्यान्वयन आप में आंशिक रूप से प्राप्त प्रतिक्रियाओं देखते हैं हो सकता है responseTextजब readyState==3, लेकिन यह सार्वभौमिक समर्थित नहीं है और इस पर भरोसा नहीं किया जाना चाहिए।


5
स्थानांतरण में त्रुटियां अभी भी रेडीस्टेट को 4 में अपडेट करती हैं। हालांकि, एक पूरी तरह से बाधित ट्रांसफर 0. के लिए रेडीस्टेट को रीसेट करेगा। इसलिए, ट्रांसफर में एक त्रुटि जो रीडायरेक्ट का परिणाम है, वास्तव में "त्रुटि" नहीं है और आप लॉगिंग को अनदेखा करने का विकल्प चुन सकते हैं। / त्रुटि की रिपोर्ट करना अगर xr का रेडीस्टेट 0. है। यह थोड़ा नाजुक है, और आपका माइलेज इस आधार पर भिन्न हो सकता है कि हर घटना / त्रुटि को लॉग करना "होना चाहिए" या "अच्छा है"। यदि यह बाद की बात है, तो आप दुर्लभ घटना को खो सकते हैं जो 0. के रेडीस्टेट के साथ एक त्रुटि हो सकती है
ग्रेग पेटिट

2
उनकी सलाह के लिए +1 से @MattBianco। मैं यह भी जोड़ना चाहूंगा कि मोज़िला डेवलपर नेटवर्क एमडीएन यकीनन आपके सभी जावास्क्रिप्ट / HTML / CSS जरूरतों के लिए सबसे लोकप्रिय और भरोसेमंद संदर्भ साइटों में से एक है। Google खोज करते समय, अपनी क्वेरी को "mdn" से जोड़ें और आप अपने आप को कुछ सिरदर्द से बचाएंगे।
डोंडेस्टेमीकोलो

@GregPettit, क्या हम बिना इंटरनेट कनेक्शन के लिए, 0 का उपयोग कर सकते हैं, या ऐसे कोई कारण मौजूद नहीं हैं, जहां "अनुरोध का प्रारंभ न हो"
विशाल शर्मा

4
मुझे यकीन नहीं है, @vishalsharma - जैसा कि मुझे याद है, रिस्ट्रिक्ट 0 है जब तक कि अनुरोध को आरंभीकृत नहीं किया जाता है। उसके बाद, कोई भी अन्य "पूर्णता" (या तो सफलता या त्रुटि से) 4 को रीडिस्टेट को अपडेट करेगा। इसलिए ट्रांसफर शुरू होने के बाद इंटरनेट खोने पर इसे 4 पर फ्लिप कर दिया जाएगा, वापस 0. को नहीं। यदि ट्रांसफर होने पर कभी इंटरनेट नहीं आया कोशिश की, यह अभी भी 0 पर होना चाहिए; यह हैंडशेक के बाद केवल 1 पर जाएगा।
ग्रेग पेटिट

रेडीस्टेट 2 के लिए स्पष्टीकरण गलत है - या कम से कम पूरी तरह से भ्रामक। अनुरोध को भेज दिया गया था, लेकिन वे राज्य वास्तव में कहते हैं कि सभी अंतिम प्रतिक्रिया हेडर प्राप्त हुए थे।
इंटका

32

kieron के उत्तर में w3schools Ref शामिल है। जिस पर कोई भरोसा नहीं करता है, बॉबिन का उत्तर लिंक देता है, जो वास्तव में IE के मूल कार्यान्वयन को बताता है,

इसलिए यहाँ मूल दस्तावेज को ठीक से समझने के लिए उद्धृत किया गया है जो कि रीडिस्टेट दर्शाता है:

XMLHttpRequest ऑब्जेक्ट कई राज्यों में हो सकता है। रेडीस्टेट विशेषता को वर्तमान स्थिति लौटना चाहिए, जो निम्न में से एक होनी चाहिए:

UNSENT (संख्यात्मक मान 0)
ऑब्जेक्ट का निर्माण किया गया है।


खुला (संख्यात्मक मान 1) खुले () विधि को सफलतापूर्वक लागू किया गया है। इस राज्य के अनुरोध के दौरान हेडर setRequestHeader () का उपयोग करके सेट किया जा सकता है और अनुरोध को भेजें () विधि का उपयोग करके बनाया जा सकता है।

HEADERS_RECEIVED (संख्यात्मक मान 2)
सभी पुनर्निर्देश (यदि कोई हो) का पालन किया गया है और अंतिम प्रतिक्रिया के सभी HTTP हेडर प्राप्त हुए हैं। ऑब्जेक्ट के कई प्रतिक्रिया सदस्य अब उपलब्ध हैं।

LOADING (सांख्यिक मान 3)
अनुक्रिया निकाय प्राप्त किया जा रहा है।

संपन्न (संख्यात्मक मान 4)
डेटा ट्रांसफर पूरा हो गया है या ट्रांसफर के दौरान कुछ गलत हो गया है (जैसे अनंत रीडायरेक्ट)।

कृपया यहाँ पढ़ें: W3C रेडीस्टेट की व्याख्या


@CharlesWood, मेरे लिए चुनौती यह थी कि स्टैकओवरफ्लो मार्कडाउन एडिटर w3c को संदर्भित नहीं करेगा। इसलिए बाहर की जाँच करें, इसलिए मैंने goo.gl से शॉर्ट यूआरएल डाला .... मुझे समझ नहीं आता कि यह मुझे सीधे डालने की अनुमति क्यों नहीं देगा। w3c url ...
विशाल शर्मा

हुह, मैंने सिर्फ सैंडबॉक्स में कोशिश की और यह काम करने लगा।
चार्ल्स वुड

22

मूल निश्चित दस्तावेज

0, 1और 2केवल यह ट्रैक करने के लिए कि आपने अब तक कितने अनुरोध किए हैं।

3आपको बताता है कि सर्वर की प्रतिक्रिया में आना शुरू हो गया है। लेकिन जब आप XMLHttpRequestकिसी वेब पेज से ऑब्जेक्ट का उपयोग कर रहे हैं, तो लगभग कुछ भी नहीं है (*) आप उस जानकारी के साथ कर सकते हैं, क्योंकि आपके पास विस्तारित गुणों तक पहुंच नहीं है जो अनुमति देते हैं आप आंशिक डेटा को पढ़ने के लिए।

रेडीस्टेट 4केवल एक ही है जो किसी भी अर्थ को रखता है।

(*: एक मात्र बोधगम्य उपयोग के बारे में जो मैं रेडीस्टेट के लिए जाँचने के लिए सोच सकता हूँ 3, वह यह है कि यह सर्वर के अंत में जीवन के किसी न किसी रूप को इंगित करता है, इसलिए संभवतः आप इसे प्राप्त होने पर पूर्ण प्रतिक्रिया के लिए प्रतीक्षा करने की मात्रा बढ़ा सकते हैं।)


1

onreadystatechange एक फ़ंक्शन (या किसी फ़ंक्शन का नाम) को स्वचालित रूप से हर बार कॉल करने के लिए तैयार करता है जब तैयार की गई प्रॉपर्टी तैयार हो जाती है, तोState XMLHttpRequest की स्थिति को बढ़ा देता है। 0 से 4 में परिवर्तन:

0: अनुरोध आरंभीकृत नहीं

1: सर्वर कनेक्शन स्थापित

2: अनुरोध प्राप्त हुआ

3: प्रसंस्करण अनुरोध

4: अनुरोध समाप्त हो गया है और प्रतिक्रिया तैयार है

स्थिति 200: "ठीक है"

404 पृष्ठ नहीं मिला


0
  • 0: UNSENT क्लाइंट बनाया गया है। खुला () अभी तक नहीं बुलाया।
  • 1: खुला खुला () कहा जाता है।
  • 2: HEADERS_RECEIVED भेजने () को बुलाया गया है, और हेडर और स्थिति उपलब्ध हैं।
  • 3: लोड हो रहा है डाउनलोड; responseText आंशिक डेटा रखती है।
  • 4: पूर्ण हो गया है।

(Https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState से)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.