2011-11-27 12 views
5

इम js में एक प्रपत्र डेटा पोस्ट करने की कोशिश:जेएस में XMLHttpRequest ऑब्जेक्ट के माध्यम से पोस्ट फॉर्मडाटा पोस्ट करें? (पार ब्राउज़र)

मैं इस कोड है:

var formData = new FormData(); 
    formData.append("username", "Groucho"); 
    formData.append("accountnum", 123456); 
    formData.append("afile", "2"); 

var xhr = new XMLHttpRequest(); 
xhr.open("POST", "http://xxxxx/xx.ashx",true); 
xhr.send(formData); 

Formdata अनुसार MDN (या अज्ञात) IE में उपलब्ध नहीं है।

enter image description here (मैं अपने ठीक लगता है ...):

जब मैं एफएफ में यह प्रयास करें।

जब मैं आईई में प्रयास करें:

enter image description here

क्या समाधान प्रपत्र डेटा पोस्ट करने के लिए (या मेरे डेटा लेकिन उद्देश्य तरीके से) Crossbrowser है?

उत्तर

3

आपने यह नहीं कहा कि IE का कौन सा संस्करण आप उपयोग कर रहे हैं। फॉर्मडाटा ऑब्जेक्ट IE9 या उससे कम में समर्थित नहीं है। XMLHTTPRequest2 (जिसमें फॉर्मडाटा ऑब्जेक्ट होता है) IE10 (http://caniuse.com/xhr2)

क्रॉस-ब्राउज़र AJAX फ़ाइल अपलोड को अभी करना बहुत मुश्किल है। आप जावास्क्रिप्ट में अपना स्वयं का फॉर्म हेडर/सीमाएं बनाने का प्रयास कर सकते हैं (यहां जवाब देखें: XMLHttpRequest POST multipart/form-data) लेकिन, व्यक्तिगत रूप से, मुझे विश्वास नहीं है कि यह प्रयास के लायक है।

7

मैंने एक साधारण रैपर लिखा है जिसका उपयोग आप आईई में फॉर्मडाटा भेजने के लिए कर सकते हैं (और यह वेबकिट/गीको में कुछ भी गड़बड़ नहीं करेगा)। सीधे शब्दों में निम्नलिखित js शामिल इससे पहले कि आप FormData इस्तेमाल करने की कोशिश:

var ieFormData = function ieFormData(){ 
if(window.FormData == undefined) 
{ 
    this.processData = true; 
    this.contentType = 'application/x-www-form-urlencoded'; 
    this.append = function(name, value) { 
     this[name] = value == undefined ? "" : value; 
     return true; 
    } 
} 
else 
{ 
    var formdata = new FormData(); 
    formdata.processData = false; 
    formdata.contentType = false; 
    return formdata; 
} 

}

अब बस सभी नए FormData() नई ieFormData() करने के लिए कॉल स्विच

करने के लिए स्विच

processData: false, 
contentType: false, 

, और

processData: formdata.processData, 
contentType: formdata.contentType, 
cache: false, 

और आप सभी सेट हैं। बेशक, यह आपको फ़ाइलों को शामिल करने की अनुमति नहीं देगा (आपको अभी भी आईफ्रेम हैक की आवश्यकता है), लेकिन यह आपको आईई में फॉर्मडाटा की नकल करने की अनुमति देगा।

+0

मुझे एक ही समस्या है, लेकिन मुझे यह ठीक नहीं है कि इसे कैसे ठीक किया जाए, अगर मेरा कोड बदल गया तो यह क्या होगा अगर फ़ाइल पोस्ट किया गया है फ़ाइल = document.getElementById ("फ़ाइल")। फ़ाइलें [0]; \t \t var formElement = document.getElementById ("formID"); \t \t var form = new formData (formElement); \t \t form.append ('पोस्टफाइल', पोस्टफाइल); \t \t request.open ("POST", "/ Admin/SaveQuestion /", true); \t \t request.send (फॉर्म); – Jay

+0

मैं पोस्ट की गई फाइल के बारे में भी चिंतित नहीं हूं, मैं बस बाकी फॉर्म डेटा जमा करने में सक्षम होना चाहता हूं – Jay

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