2012-12-29 11 views
5

सबसे पहले, कृपया समझें कि मैं आईई 9 में जेएसओएन देखने की कोशिश नहीं कर रहा हूं। मैं हर समय फिडलर का उपयोग करता हूं। मेरे पास फाइन अपलोडर नामक एक थर्ड पार्टी अपलोडर है जो सफल अजाक्स फ़ाइल अपलोड पर JSON प्रतिक्रिया संदेश की अपेक्षा करता है।वेब एपीआई आईई 9 जेएसओएन डेटा "क्या आप इस फाइल को खोलना या सहेजना चाहते हैं"

अब मैं समझता हूं कि IE9 में JSON प्रदर्शित करने के लिए कोई MIME नहीं है लेकिन मैं JSON प्रदर्शित करने की कोशिश नहीं कर रहा हूं। AJAX कुछ फ़ाइलों को अपलोड करने के बाद मैं सिर्फ एक JSON प्रतिक्रिया लौटा रहा हूं और IE9 मेरी AJAX प्रतिक्रिया को खोलने का प्रयास करता है।

चूंकि मेरा JSON में स्वरूपित सभी वेब एपीआई प्रतिक्रियाएं हैं, तो मुझे अपने आवेदन को आईई 9 के साथ संगत बनाने के लिए प्रत्येक एपीआई कॉल के लिए एक कस्टम टेक्स्ट/एचटीएमएल प्रतिक्रिया सामग्री-प्रकार जोड़ना होगा? गंभीर रूप से हास्यास्पद सामान, मैं इस बात पर नहीं जा सकता कि मैं आईई संगतता मुद्दों से निपटने में कितना समय बर्बाद करता हूं।

उत्तर

7

हालांकि रे का उत्तर काम करता है, यह सभी जेसन respones के लिए प्रतिक्रिया सामग्री प्रकार बदलता है। आदर्श रूप में, हमें उन ब्राउज़रों के लिए प्रतिक्रिया प्रकार को प्रभावित नहीं करना चाहिए जो अच्छी तरह से खेलते हैं।

इसे हल करने के लिए एक आसान तरीका (विशेष रूप से एमवीसी में) my answer to this question देखें।

संक्षेप में, निम्नलिखित कोड काम कर देता है, तथा लागू एक आधार नियंत्रक/सहायक विधि में लपेटा जा सकता है:

if (!Request.AcceptTypes.Contains("application/json")) 
    return base.Json(data, "text/plain"); 
else 
    return base.Json(data); 

मुझे आशा है कि किसी और मदद करता है!

+0

हां यह वास्तव में एक और अधिक सुरुचिपूर्ण समाधान है, धन्यवाद। –

0

क्या आप लोगों को आईई 9 का उपयोग करके अपने एपीआई का उपभोग करने की उम्मीद करते हैं? आमतौर पर, ब्राउज़र वाले लोग किसी भी तरह JSON नहीं पढ़ सकते हैं। मेरा सुझाव है कि आप Fiddler2 जैसे कुछ का उपयोग करके अपने एपीआई का परीक्षण करें।

कारण IE9 आपको फ़ाइल डाउनलोड करने के लिए संकेत देता है क्योंकि इसमें इसे प्रदर्शित करने के लिए कोई MIME हैंडलर नहीं है। ब्राउज़र को केवल कुछ माइम प्रकारों को प्रदर्शित करने के लिए डिज़ाइन किया गया है, जैसे पाठ/एचटीएमएल, टेक्स्ट/एक्सएमएल, छवि/पीएनजी, छवि/जेपीईजी इत्यादि। आपको आमतौर पर कस्टम प्रकार जैसे एप्लिकेशन/पीडीएफ प्रदर्शित करने के लिए एक विशेष प्लगइन की आवश्यकता होती है। जेएसओएन, इसके आवेदन/जेसन माइम प्रकार के साथ कोई अलग नहीं है।

यदि यह वास्तव में आपको बहुत अधिक खराब करता है, तो this और this पढ़ें।

+1

वैसे यह बात है, मैं JSON को पढ़ने/देखने की कोशिश नहीं कर रहा हूं, मैं जेएसओएन को फाइन अपलोडर नामक किसी तृतीय पक्ष फ़ाइल अपलोडर पर वापस कर रहा हूं। सफल अपलोड ({"सफलता" = सत्य} प्रदर्शित करने के लिए इसे JSON प्रारूपित संदेशों की आवश्यकता है)। तो उपभोक्ता ठीक अपलोडर उर्फ ​​कुछ ग्राहक पक्ष जावास्क्रिप्ट है और आईई 9 ठीक अपलोडर के लिए जेएसओएन संदेश खोल रहा है। यह रास्ते से एक अजाक्स कॉल है। तो प्रारंभिक लोड पर माइम प्रकार टेक्स्ट/एचटीएमएल –

1

समस्या आपकी प्रतिक्रिया की सामग्री-प्रकार है: यह "टेक्स्ट/सादा" होना चाहिए, न कि "एप्लिकेशन/जेसन"।

+0

माइक्रोसॉफ्ट का वेब एपीआई सामग्री-प्रकार को एप्लिकेशन/जेसन पर सेट कर रहा है। मैं जेसन लौट रहा हूं, मैं सामग्री-प्रकार को टेक्स्ट/सादे में क्यों सेट करूंगा? IE9 को खुश करने के लिए? –

+3

आईई को खुश करने के लिए, हाँ। –

+0

मैंने अपनी सामग्री-प्रकार को टेक्स्ट/एचटीएमएल में बदल दिया, मुझे यकीन है कि पाठ/सादा काम भी करता है। मैं आपके उत्तर को वोट देने का प्रयास करता हूं लेकिन मेरी प्रतिष्ठा ऐसा करने के लिए पर्याप्त नहीं है, आपकी मदद के लिए धन्यवाद। –

3

वेबएपीआई में, आप ग्लोबल.एक्सएक्स में निकाले गए कॉन्फ़िगरेशन में वैश्विक प्रतिक्रिया सेट कर सकते हैं। इस प्रकार आपके सभी ब्राउज़र आपके वेबएपीआई प्रतिक्रियाओं को वास्तविक JSON के रूप में मानते हैं।

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // stuff... 

     config.Formatters.Add(new JsonMediaTypeFormatter()); 
     config.Formatters.JsonFormatter.SupportedMediaTypes 
      .Add(new MediaTypeHeaderValue("application/json")); 

     // Most important... +++++++++++++ 
     config.Formatters.JsonFormatter.SupportedMediaTypes 
      .Add(new MediaTypeHeaderValue("text/html")); 
     // ------------------------------- 

     config.EnsureInitialized(); 
    } 
}