2011-12-21 3 views
12

मैं जेसन को अपनी कार्रवाई से वापस करने की कोशिश कर रहा था और उसके बाद आईई ने इसे डाउनलोड करने की कोशिश की और मुझे संवाद बचाया। मैंने फ़ायरफ़ॉक्स में इसका परीक्षण किया, और वहां यह ठीक काम करता है।आईईएस एएसपी में JSON डाउनलोड करने का प्रयास करता है। नेट एमवीसी 3

return Json(new { success = false, message = ex.Message }, "application/json"); 

उस व्यवहार का कारण क्या है और मैं उस मुद्दे को कैसे हल कर सकता हूं?

उसके बाद जावास्क्रिप्ट भाग में मैं इस

if (responseJSON.success == false) { 
         alert(responseJSON.message); 
         cancel(); 
        } 

कोशिश लेकिन आईई वैसे भी चेतावनी नहीं दिखाती है। यह मुझे संवाद बचाता है।

मैंने "application/json" को "text/plain" के साथ बदलने की कोशिश की और संवाद गायब हो गया, लेकिन मैं अभी तक चेतावनी नहीं देख पा रहा हूं। मैं क्या खो रहा हूँ?

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

यहाँ मेरी complect जावास्क्रिप्ट है, मैं छवियों को अपलोड करने

var uploader = new qq.FileUploader({ 
       element: document.getElementById("image-upload"), 
       action: '/Home/ImageUpload', 
       allowedExtensions: ['jpg', 'png', 'gif'], 
       sizeLimlit: 2048,onComplete: function (id, fileName, responseJSON) { 
        if (responseJSON.success == false) { 
         alert(responseJSON.message); 
         cancel(); 
        } 
        else { 
         alert("success"); 
          //some code here 
         } 
        } 
        }); 

मैं अपने बाकी हिस्से में alert("success"); साथ परीक्षण किया था और json अग्रेषित के लिए Valums qquploader (पूर्व Ajaxupload) का उपयोग कर रहा "text/plain" के रूप में और इसके बाद मैंने अलर्ट देखा। लेकिन उस समय responseJSON.success != false मेरे लिए। क्या आप इसके बारे में कोई सुझाव है?

+1

आप अपनी कार्रवाई कैसे कॉल कर रहे हैं? क्या आप हमें क्लाइंट साइड जावास्क्रिप्ट दिखा सकते हैं? –

+0

कोई भी आईई एडॉन्स या स्थानीय सेटिंग्स tweaks? अपने पंजीकृत एमआईएम प्रकारों की जांच करें। – asawyer

+0

मेरे संपादन की जांच करें मैंने पहले ही जावास्क्रिप्ट का हिस्सा लिखा है। @ जॉन गिब, मुझे लगता है कि इससे कोई फर्क नहीं पड़ता कि मैं अपनी कार्रवाई कैसे कहता हूं। –

उत्तर

17

मैं हल है कि इस चाल

return Json(new { success = false, message = ex.Message }, "text/html"); 
साथ

और अब यह काम करता है। लेकिन क्या कोई मुझे बता सकता है कि यह टेक्स्ट/एचटीएमएल के साथ क्यों काम करता है, और एप्लिकेशन/जेसन और टेक्स्ट/सादे के साथ काम नहीं करता है। सबसे पहले JSON डाउनलोड करने का प्रयास कर रहा है और दूसरा JSON फ़ील्ड के लिए अपरिभाषित गुणों को वापस कर रहा है।

+0

मुझे एक ही समस्या थी, और इसे "एप्लिकेशन/जेसन" से "टेक्स्ट/एचटीएमएल" में बदलकर काम किया। मैंने ब्लॉग पोस्ट में अपने निष्कर्षों के बारे में लिखा, शायद यह आपको कुछ और जानकारी दे सकता है: http://blog.degree.no/2012/09/jquery-json-ie8ie9-treats-response-as-downloadable-file/ – Andreas

+1

आईई 8 तक आईई में ब्राउज़र में इनबिल्ट जेसन नहीं है। यह इतनी सारी समस्याएं पैदा कर रहा था। वेबपृष्ठों में आप json2.js जोड़कर इसे ठीक कर सकते हैं। जो https://github.com/douglascrockford/JSON-js – amesh

2

संभवत: आप अपने json सामग्री के लिए एक सही प्रकार सेटिंग नहीं कर रहे हैं (आईई के लिए पाठ/सादे कोशिश)

देखें: What problems may using the MIME type application/json cause?

+0

मैंने अपना प्रश्न संपादित कर लिया है, क्या आप इसे देख सकते हैं? –

2

मैं इसी अपलोडर का उपयोग कर रहा था और एक ही समस्या थी।

इसे अनुरोध हेडर भेजे गए हैं। आईई को एक स्वीकृति हेडर रखने का अनुरोध चाहिए जो जेसन को इंगित करता है।

xhr.setRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01"); 

आप इस लाइन के बाद इस सम्मिलित करें:

xhr.setRequestHeader("Content-Type", "application/octet-stream"); 
js फ़ाइल में

(मेरा fileuploader.js कहा जाता है) तो आप अब समस्या नहीं होनी चाहिए, और यह इंगित करने की जरूरत नहीं है आपकी वापसी में पाठ/एचटीएमएल।

पेज। मैंने सामग्री-प्रकार की लाइन पर टिप्पणी की, लेकिन अब मुझे यकीन नहीं है कि क्यों। अगर इसे जोड़ने की स्वीकृति रेखा काम नहीं करती है, तो सामग्री-प्रकार शीर्षलेख पर भी टिप्पणी करने का प्रयास करें।

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

मैं फिर से मेरी फाइल को देखा है, और ऐसा लगता है भी एक और बदलाव किया है।

लाइन के बजाय

:

xhr.send(file) 

मैं में डाल दिया:

var formData = new FormData(); 
formData.append("image", file); 
xhr.send(formData); 

यह ऊपर setrequesrheader पंक्ति के बाद आता है।

मुझे यकीन नहीं है कि यह परिवर्तन सभी उपयोगों के लिए काम करेगा, जैसे एकाधिक फ़ाइल अपलोड। मैं केवल अपने उपयोग के लिए एक ही छवि अपलोड करता हूं।

+0

से उपलब्ध है मैंने टिप्पणी के साथ दोनों तरीकों की कोशिश की है और उस पंक्ति पर टिप्पणी नहीं की है, लेकिन नतीजा वही है। आईई जेएसओएन डाउनलोड करने के लिए मील का सुझाव देता है। –

+0

ऐसा लगता है कि मैंने एक ही बदलाव में एक और बदलाव किया है जिसे मैंने बनाया था। मैंने अपनी पोस्ट संपादित की। उसके लिए माफ़ करना। –

+0

दुखी, यह मेरे लिए काम नहीं करता है। –

8

यह समस्या आईई के साथ अपलोड करने के लिए iframe का उपयोग करने वाली अपलोड प्लगइन का उपयोग करते समय होती है (9.0 पर परीक्षण)।

आईई Accept: text/html, , application/xhtml+xml, */* शीर्षलेख सेट करता है और इसलिए जब आप Content-type: application/json के साथ जवाब देते हैं, तो यह मानता है कि यह फ़ाइल है (या कम से कम यही एकमात्र स्पष्टीकरण है जिसे मैं वेब पर पा सकता हूं)।

इस प्रकार, इसे रोकने के लिए, आपको Content-type: text/html या Content-type: text/plain सेट करने की आवश्यकता है।

मैं ActionFilter का उपयोग करके इसे लागू करने की अनुशंसा करता हूं; मैन्युअल रूप से सामग्री प्रकार को बदलने के बजाय, IE और एक मल्टीपार्ट पोस्ट का पता लगाएं और उसके अनुसार सामग्री-प्रकार बदलें।

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