2011-03-22 10 views
38

आईई 9 के साथ अपने jQuery अनुप्रयोगों का परीक्षण शुरू किया। ऐसा लगता है कि मैं यहां कुछ परेशानी के लिए हो सकता हूं। मैंने देखा कि जब मैं जेएसओएन डेटा को जावास्क्रिप्ट विधियों पर वापस लौटाता हूं तो मुझे हमेशा यह संकेत मिलता है जो कहता है: "क्या आप इस फाइल को खोलना या सहेजना चाहते हैं?" और मुझे 3 बटन प्रदान करता है: खोलें, सहेजें और रद्द करें। बेशक, मेरी जावास्क्रिप्ट JSON ऑब्जेक्ट में सेट मानों के आधार पर क्रियाएं कर रही है, लेकिन चूंकि आईई 9 इसे स्क्रिप्ट पर पास नहीं करता है, इसलिए मैं वहां से फॉलो अप एक्शन निष्पादित नहीं कर सकता।आईई 9 जेएसओएन डेटा "क्या आप इस फाइल को खोलना या सहेजना चाहते हैं"

कोई और इस मुद्दे का सामना कर रहा है? यहां एक स्नैपशॉट है। enter image description here

+3

सर्वर से जेएसओएन प्रतिक्रिया के साथ HTTP शीर्षलेख वापस भेजे जा रहे हैं? – BigFatBaby

+0

क्या आपने एक ही पृष्ठ को एक अलग ब्राउज़र में एफएफ की तरह कोशिश की है? क्या आपको आईई 9 में जावास्क्रिप्ट सक्षम है? – Xhalent

+0

आप लगभग निश्चित रूप से गलत MIME सामग्री-प्रकार भेज रहे हैं, या किसी IFRAME टैग पर JSON प्रतिक्रिया भेजने की तरह कुछ अजीब कर रहे हैं। एक रेपो यूआरएल हमें आसानी से देखने की अनुमति देगा। (बनाम जेएस को अक्षम करने में सक्षम करने से कोई फर्क नहीं पड़ता)। – EricLaw

उत्तर

2

दरअसल, आप सही @EricLaw थे। जेसन परिणाम में सामग्री प्रकार सेट करने के बाद, यह काम किया। मैं निम्नलिखित लाइनों को जोड़ने के लिए किया था: किसी ASP.net MVC का उपयोग करने और इस समस्या को हल करने की कोशिश कर रहा है, तो

result.ContentEncoding = System.Text.Encoding.UTF8; 
result.ContentType = "application/json; charset=UTF-8 
+4

यह मेरे लिए काम नहीं कर रहा है – Dan

+0

नीचे मेरा जवाब देखें, इसे मदद करनी चाहिए: http://stackoverflow.com/questions/5388893/ie9-json-data-do-you-want-to-open-or-save- यह फ़ाइल/15 9 11008 # 15 911008 – Chris

21

- मैं MVC ढांचे में तरीकों में बनाया निम्नलिखित इस्तेमाल किया। JsonResult पर सामग्री प्रकार और एन्कोडिंग को बस अपडेट करें।

public ActionResult Index(int id) 
{ 
     // Fetch some data 
     var someData = GetSomeData(); 

     // Return and update content type and encoding 
     return Json(someData, "text/html", System.Text.Encoding.UTF8, 
         JsonRequestBehavior.AllowGet); 
} 

यह मेरे लिए मुद्दा तय करता है!

+0

मुझे लगता है कि 'जेसन' क्लास' System.Web.Helpers' में है, लेकिन मुझे एक विधि, प्रतिनिधि, या घटना अपेक्षित "" संदेश मिल रहा है और यह नहीं बनाया जाएगा। मौका से पता है कि मुझे क्या याद आ रही है? – atconway

+1

इस दृष्टिकोण के साथ डेवलपर को सामग्री-प्रकार को "टेक्स्ट/एचटीएमएल" पर सेट करना याद रखना होगा जब भी वे JSON लौट रहे हों। क्या होगा अगर वे भूल जाते हैं? अच्छा समाधान नहीं है! इसके अलावा, जेएसओएन डेटा लौटाना और ब्राउजर को बता देना एचटीएमएल सामग्री मूल रूप से गलत है! – Mosh

6

मुझे वेबएपीआई के साथ कल भी इस समस्या का सामना करना पड़ा, जिसने यूआरएल (असीमित रूप से अपलोड की गई फाइलों) की एक सूची लौटा दी।

वेबैपी सेवाओं के डिफ़ॉल्ट "एप्लिकेशन/जेसन; वर्णसेट = यूटीएफ -8" के बजाय सामग्री प्रकार को "टेक्स्ट/एचटीएमएल" पर सेट करें। मुझे JSON स्ट्रिंग के रूप में प्रतिक्रिया मिली और फिर इसे JSON ऑब्जेक्ट में बदलने के लिए $ .parseJSON का उपयोग किया।

public async Task<HttpResponseMessage> Upload() 
{ 
    // ... 
    var response = Request.CreateResponse(HttpStatusCode.OK, files); 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html"); 
    return response; 
} 

// result is an iframe's body content that received response. 
$.each($.parseJSON(result.html()), function (i, item) 
{ 
    console.log(item.Url); 
}); 
+0

वेबपी के संबंध में प्रतिक्रिया के लिए धन्यवाद। मुझे यह सही समस्या है और ContentType को काम करने की सेटिंग है। मैंने CreateResponse अधिभार के माध्यम से "टेक्स्ट/एचटीएमएल" सेट करने का प्रयास किया, लेकिन एमवीसी ने एक अपवाद फेंक दिया जिसमें कहा गया है कि इसके लिए एक फॉर्मेटर नहीं मिल सकता है (केवल जेसन और एक्सएमएल का समर्थन करता है)। –

+0

मुझे भी एक ही समस्या का सामना करना पड़ रहा है, मैंने इस समाधान की कोशिश की लेकिन यह रूपांतरण त्रुटि उत्पन्न कर रहा है: 'System.Net.Http.HttpResponseMessage' को 'System.hreading.Tasks.Task Vipul

+0

@ विपुल: मुझे लगता है कि आपकी कार्य विधि में कुछ गड़बड़ है, क्या आप यहां अपना कोड कॉपी कर सकते हैं? –

3

मेरे मामले में जब प्रतिक्रिया हेडर में contentType है "application/json; charset = UTF-8", आईई 9 पता चलता है कि शीघ्र। लेकिन "टेक्स्ट/एचटीएमएल" में बदल दिया गया तो प्रॉम्प्ट नहीं दिखता है, हालांकि सभी ऑटर ब्राउज़र "एप्लिकेशन/जेसन; क्रिससेट = यूटीएफ -8" के साथ ठीक हैं।

+0

दरअसल आईई 8 भी टूटा हुआ है और बदलाव की जरूरत है। – philw

13

(उत्तर मूल रूप से this question पोस्ट किया गया।)

तो MVC का उपयोग कर, हैंडलिंग इस इस प्रकार एक आधार नियंत्रक जिसमें आप ओवरराइड (छिपाने) Json (वस्तु) विधि को लागू करने के लिए है की एक ही रास्ता:

public class ExtendedController : Controller 
{ 
    protected new JsonResult Json(object data) 
    { 
     if (!Request.AcceptTypes.Contains("application/json")) 
      return base.Json(data, "text/plain"); 
     else 
      return base.Json(data); 
    } 
} 

अब, अपने नियंत्रक सभी ExtendedController वारिस सकते हैं और बस return Json(model); फोन ...

  • उन ब्राउज़रों जो अच्छी तरह से खेलने के लिए प्रतिक्रिया सामग्री प्रकार को संशोधित किए बिना (नहीं < = IE9!)
  • अपने विभिन्न अजाक्स कार्रवाई तरीकों में Json(data, "text/plain") उपयोग करने के लिए याद करने के लिए बिना

यह json अनुरोध के साथ काम करता है जो अन्यथा IE8 & आईई 9 में "ओपन या सेव" संदेश प्रदर्शित करें जैसे jQuery File Upload

+1

मैंने "टेक्स्ट/सादा" के बजाय "टेक्स्ट/एचटीएमएल" का इस्तेमाल किया, लेकिन यह क्लाइंट पर उपयोग किए गए विशिष्ट कार्यान्वयन के कारण हो सकता है। बस उस व्यक्ति के लिए इसका जिक्र करना जिसकी एक ही समस्या है। –

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