2012-06-01 26 views
29

FormData IE 8/9 में मौजूद नहीं है लेकिन मुझे उन ब्राउज़र में उस कार्यक्षमता की आवश्यकता है। क्या इसके लिए कोई अच्छा फॉलबैक है?IE में फॉर्मडाटा के लिए फ़ॉलबैक 8/9

मैं जेसन डेटा भेजने की कोशिश करता हूं, लेकिन मुझे सर्वर पर एक फाइल को पास करने की आवश्यकता है। मैं इस ब्राउज़र को आधुनिक ब्राउज़र में formData पर जोड़ता हूं और केवल XHR अनुरोध सबमिट करता हूं। चूंकि FormData आईई 8/9 में मौजूद नहीं है, यह स्पष्ट रूप से विफल रहता है।

// I cant seem to get this to work with a file. 
$.ajax({ 
    url: '/genericHandlers/UploadDocsFile.ashx', 
    type: "POST", 
    data: model.toJSON(), 
    contentType: 'application/json' 
    }).done(function (data) { 
     log('stuff happened!'); 
    }); 

शायद एक विकल्प जेएस में नकली फॉर्म ऑब्जेक्ट बनाना है, फिर उस डेटा को जोड़ना है?

+5

खिड़की के लिए एक polyfill प्यार करोगे .FormData विधि। –

+0

फिर मैं आपको एक नया फॉर्मडाटा [पॉलीफिल] प्रस्तुत करता हूं (https://github.com/jimmywarting/FormData/) फिर भी दुर्भाग्यवश ब्लॉब्स बनाने पर निर्भर करता है ... शायद आप इसका भी उपयोग कर सकते हैं: [Blob.js] (https: //github.com/eligrey/Blob.js)। एक फ़ाइल को पढ़ने के लिए आपको फ़्लैश – Endless

उत्तर

8

मुझे केवल एक संभावित समाधान पता है, लेकिन यह वास्तव में आईईएस के लिए 1-1 फॉलबैक नहीं है। फ़ाइलों को भेजने के लिए कोई संभावित संचार API नहीं है, क्योंकि आप पुराने ब्राउज़र में इनपुट फ़ील्ड को बाध्य नहीं कर सकते हैं, जैसे कि आधुनिक डेटा में फॉर्मडेटा का उपयोग करना। लेकिन आप एक आईफ्रेम का उपयोग कर पूरा फॉर्म भेज सकते हैं। इस मामले के लिए आप jquery.form प्लगइन का उपयोग कर सकते हैं जो एक्सएचआर डेटाफॉर्म और आईफ्रेम का समर्थन करता है (जब ब्राउज़र फॉर्मडाटा एपीआई समर्थन नहीं करता है तो डेटा आईफ्रेम के साथ भेजता है)।

4

आप XMLHttpRequests का उपयोग कर मैन्युअल रूप से फ़ाइल भेज सकते हैं, इस here पर बहुत सारी जानकारी है।

अगर ब्राउज़र में पहली FormData वस्तु का उपयोग कर सकते आप परीक्षण कर सकते हैं:

if(typeof FormData !== 'undefined') 
    ... 

MDN है एक this function जो आप वापस आने के लिए संशोधित कर सकते हैं:

var XHR = new XMLHttpRequest(); 
var urlEncodedData = ""; 
var urlEncodedDataPairs = []; 
var name; 

// We turn the data object into an array of URL encoded key value pairs. 
for(name in data) { 
    urlEncodedDataPairs.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name])); 
} 

// We combine the pairs into a single string and replace all encoded spaces to 
// the plus character to match the behaviour of the web browser form submit. 
urlEncodedData = urlEncodedDataPairs.join('&').replace(/%20/g, '+'); 
+3

@ करसन वास्तव में आवश्यकता होगी? Https://en.wikipedia.org/wiki/XMLHttpRequest#History_and_support माइक्रोसॉफ्ट ने अक्टूबर 2006 में जारी इंटरनेट एक्सप्लोरर 7.0 में अपनी स्क्रिप्टिंग भाषाओं में XMLHttpRequest ऑब्जेक्ट आइडेंटिफायर जोड़ा। –

+1

अवधारणा को ActiveXObjects के साथ IE 5 और 6 पर लागू किया जा सकता है यदि आप वास्तव में साथ ही चाहता था –