2008-11-11 16 views

उत्तर

171

यदि ब्राउज़र एक ajax अनुरोध करने के लिए एक रीडायरेक्ट प्रतिक्रिया मिलती है तो क्या होगा?

यदि सर्वर एक रीडायरेक्ट भेजता है (उर्फ 302 प्रतिक्रिया प्लस एक स्थान: शीर्षलेख) रीडायरेक्ट स्वचालित रूप से ब्राउज़र द्वारा पीछा किया जाता है। दूसरा अनुरोध (यह मानते हुए कि यह एक और रीडायरेक्ट नहीं है) की प्रतिक्रिया आपके कार्यक्रम के संपर्क में है।

वास्तव में, आप पता लगाने के लिए कि क्या एक 302 प्रतिक्रिया आ गई है की क्षमता नहीं है। यदि 302 रीडायरेक्ट 200 की ओर जाता है, तो आपका प्रोग्राम समान रूप से कार्य करता है जैसे मूल अनुरोध सीधे 200 तक चला जाता है।

यह मेरा अनुभव और behavior called out in the spec दोनों रहा है।

2016 अद्यतन: समय बीत चुका है, और अच्छी खबर यह है कि नए fetch() APIfiner-grained control of how redirects are handled पेशकश करने के लिए, एक्सएचआर के समान डिफ़ॉल्ट व्यवहार के साथ spec'd जाता है। उस ने कहा, यह केवल काम करता है जहां fetch() लागू किया गया है मूल रूप सेPolyfill versions of fetch() - जो XHR- continue to have XHR's limitations पर आधारित हैं। सौभाग्य से, native browser support अच्छी तरह से गोल करने लगते हैं।

+32

दिलचस्प बात यह है कि, मैं इस पर पहुंचा क्योंकि मुझे ऐसी स्थिति का सामना करना पड़ रहा है जहां रीडायरेक्ट का पालन नहीं किया जा रहा है ... ऐसा तब होता है जब रीडायरेक्ट उसी मूल नीति का उल्लंघन करता है। – Gus

+2

@ गुस जो शायद तार्किक है – Dmitry

+0

क्या होता है यदि रीडायरेक्ट 200 के बजाय 401 की ओर जाता है? मुझे लगता है कि मैं उस मुद्दे पर चल रहा हूं और jQuery के साथ त्रुटियां प्राप्त कर रहा हूं, इसलिए मैं यह पता लगाने की कोशिश कर रहा हूं कि ब्रोवर/जेएस क्या कर रहा है। –

7

ajax-request कि afaik अनुप्रेषित का पालन करेंगे। वास्तविक सामग्री (.responseText, .responseXML) उस पृष्ठ की सामग्री होगी जिस पर आपको रीडायरेक्ट किया गया है।

readyState 2 या 3 पर आप रीडायरेक्ट (status-code, location-header) को अवरुद्ध करने में सक्षम हो सकते हैं, लेकिन इसके बारे में निश्चित नहीं हैं।

+0

नहीं, उन सभी राज्यों में ठीक उसी स्थिति ले। यहां तक ​​कि 'getAllResponseHeaders()' का मान बराबर है। – sebastianwagner

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