2009-07-17 5 views
72

साथ स्वीकार करें HTTP हेडर सेट नहीं कर सकता।ठीक से मुझे स्वीकार HTTP शीर्ष लेख इस jQuery कोड के साथ "text/xml" करने के लिए सेट करने के लिए कोशिश कर रहा हूँ jQuery

लेकिन आईई में, जो मान मैं स्वीकार्य हेडर के लिए सेट करने की कोशिश कर रहा हूं वह अंत में संलग्न हो जाता है, इसलिए यह बन जाता है: Accept: */*, text/xml। यह मेरे AJAX कॉल को HTML संस्करण को वापस करने का कारण बनता है जो कि xml संस्करण के विपरीत है जो मैं चाहता हूं।

क्या कोई जानता है कि आईई 8 में स्वीकृति हेडर को सही तरीके से सेट/साफ़ कैसे किया जाए?

अपडेटेडः कुछ कारणों से तारांकन प्रकट नहीं हो रहे थे क्योंकि मैंने उन्हें दर्ज किया था। आईई में स्वीकार्य हैडर प्रतीत होता है: Accept: */*, text/xml

उत्तर

0

मुझे विश्वास नहीं है कि आईई (कोई भी संस्करण) स्वीकृति शीर्षलेख के साथ अच्छा खेलता है। यह लिंक देखें: [http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx]

उपयोगकर्ता एजेंट को यह देखने के लिए एक संभावित समाधान हो सकता है कि यह आईई है या नहीं। यदि ऐसा है, तो पाठ/एक्सएमएल की उपस्थिति की जांच करें।

शुभकामनाएं!

संपादित करें:

ओह लिंक पर। मेरे कूबड़ बस / के बाद वांछित माइम प्रकार कहते हैं आईई हमेशा / जोड़ने और स्वीकार शीर्षलेख स्थापित कर रही है था।

+0

यह केवल/जोड़ नहीं है। यह वास्तव में जोड़ता है: \ */\ * प्रश्न में समस्या स्वरूपण –

+0

हाँ, मुझे लगा कि यह एक स्वरूपण मुद्दा था ... मुझे एक ही चीज़ का सामना करना पड़ा – BStruthers

2

मुझे लगता है कि मूल पोस्टर इस लिंक का जिक्र कर रहा है: http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx हालांकि, यह आपके द्वारा देखे जाने वाले व्यवहार की व्याख्या नहीं करता है।

आईई आपके द्वारा वर्णित व्यवहार नहीं करता है, और XMLHTTPRequest के माध्यम से स्वीकृति शीर्षलेख सेट करना ठीक से काम करना चाहिए। मैंने पुष्टि करने के लिए आईई 8 में परीक्षण किया है।

यह संभव है कि jQuery के आपके संस्करण में कोई समस्या हो, या शायद आपके पास कुछ ट्रैफ़िक है जो आपके यातायात को उलझाना है?

8

आपकी समस्या यहां वर्णित एक प्रतीत होती है: http://www.grauw.nl/blog/entry/470। मुद्दा यह है कि XMLHttpRequest specification वर्तमान में बताता है कि उपयोगकर्ता एजेंटों को अनुरोध के लिए डिफ़ॉल्ट रूप से कोई स्वीकृति शीर्षलेख सेट नहीं करना चाहिए, ताकि req.setRequestHeader() केवल नए स्वीकृतियां जोड़ सकें। दुर्भाग्यवश ब्राउज़र अभी तक इसका पालन नहीं करते हैं। समस्या लिखने से आप यह देखने के लिए अपने ब्राउज़र का परीक्षण कर सकते हैं कि यह ठीक से काम करता है, और दुर्भाग्य से आई 7, क्रोम, सफारी, फ़ायरफ़ॉक्स और ओपेरा सभी असफल हो जाते हैं।

लॉरेन्स Grauw भी पहली

setRequestHeader('Accept', '') 

या

setRequestHeader('Accept', null) 

इन के साथ शीर्ष लेख स्वीकार बाहर शून्य करने के लिए यहाँ मदद कर सकता है की कोशिश कर के प्रभाव के बारे में बात करती है।

बदसूरत सर्वर-साइड हैक: यदि आपके सर्वर-साइड ऐप पर नियंत्रण है तो आप इसे हमेशा एक्सएमएल वापस करने के लिए कड़ी मेहनत कर सकते हैं, कस्टम एप्लिकेशन प्रकार जैसे "एप्लिकेशन/आई-सचमुच-एक्सएमएल", या "एक्स-स्वीकृति" जैसे कस्टम HTTP शीर्षलेख के लिए समर्थन जोड़ें।

+0

setRequestHeader ('स्वीकार करें', शून्य) "टाइप मिस्चैच" देता है आईई 8 इसे पहले काम करने के लिए सेट करना! – mplungjan

68

मुझे भी आईई में नहीं बल्कि jQuery 1.6.2 का उपयोग करके क्रोम और सफारी में भी परेशानी थी। यह समाधान उन सभी ब्राउज़रों में लक्षित है जो मैंने कोशिश की है (क्रोम, सफारी, आईई, फ़ायरफ़ॉक्स)।

$.ajax({ 
    headers: { 
     Accept : "text/plain; charset=utf-8", 
     "Content-Type": "text/plain; charset=utf-8" 
    }, 
    data: "data", 
    success : function(response) { 
     ... 
    } 
}) 

कोशिश करें कि यह अभी भी आपको परेशानी दे रहा है।

24

jQuery का उपयोग करके आप सेट कर सकते हैं 1.5+ dataType प्रति हेडर को स्वीकार करता है तो आप कुछ इस तरह कर सकते हैं:

$.ajax({ 
    dataType: ($.browser.msie) ? "text" : "xml", 
    accepts: { 
     xml: "text/xml", 
     text: "text/xml" 
    } 
}); 
+0

1.11.1- '\t \t के स्रोत से स्वीकार करता है: { \t \t \t "*": allTypes, \t \t \t पाठ: "पाठ/सादे", \t \t \t एचटीएमएल: "text/html", \t \t \t xml: "application/xml, text/xml", \t \t \t json: "application/json, पाठ/javascript" \t \t} ' – nicodemus13

+0

तो ये स्वीकार करता है एक उम्मीद कर रहे हैं कि कर रहे हैं डी के रूप में आप डेटा टाइप भी सेट करना होगा। – nicodemus13

1

इस नहीं है कैसे प्रलेखन यह किया जाना चाहिए कहा गया है, यह क्या मेरे लिए काम किया है ।

jQuery.ajax({ 
    type: "POST", 
    url: "...", 
    data: ..., 
    contentType: "text/xml", 
    beforeSend: function(req) { 
    req.setRequestHeader("Accept", "text/xml"); 
    }, ...}); 
संबंधित मुद्दे

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