2012-06-01 5 views
29

FormData existiert nicht in IE 8/9, aber ich brauche diese Funktionalität in diesen Browsern. Gibt es dafür einen schönen Rückfall?Fallback für FormData in IE 8/9

Ich würde versuchen, über Json Daten zu senden, aber ich muss eine Datei an den Server übergeben. Ich füge diese Datei an die formData in modernen Browsern an und reiche einfach eine XHR Anfrage ein. Da FormData in IE 8/9 nicht existiert, schlägt dies offensichtlich fehl.

Vielleicht ist eine Alternative, ein gefälschtes Formularobjekt in js zu erstellen und dann die Daten anzuhängen?

+5

Würde ein polyfill für das Fenster lieben .FormData-Methode. –

+0

Dann präsentiere ich Ihnen eine neue FormData [Polyfill] (https://github.com/jimmywarting/FormData/) Immer noch abhängig davon, Blobs leider zu konstruieren ... Vielleicht können Sie dies auch verwenden: [Blob.js] (https: //github.com/eligrey/Blob.js). Um eine Datei zu lesen, benötigen Sie Flash – Endless

Antwort

8

Ich kenne nur eine mögliche Lösung, aber es ist nicht wirklich 1-1 Fallback für IEs. Es gibt keine Kommunikations-API für das Senden von Dateien, da Sie Eingabefelder in alten Browsern nicht binden können, wie in modernen mit FormData. Aber Sie können das ganze Formular mit einem iframe senden. In diesem Fall können Sie das Plugin jquery.form verwenden, das XHR DataForm und iframe unterstützt (Daten werden mit iframe gesendet, wenn der Browser keine Unterstützung für FormData API bietet).

4

Sie können die Datei manuell mit XMLHttpRequests senden, es gibt viele Informationen zu diesem here.

Sie können testen, ob der Browser das FormData Objekt zuerst mit verwenden:

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

MDN hat eine this function die Sie für den Rückfall ändern könnte:

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

@Karson Wirklich? Wie https://en.wikipedia.org/wiki/XMLHttpRequest#History_and_support Microsoft hinzugefügt die XMLHttpRequest -Objektbezeichner zu seinen Skriptsprachen in Internet Explorer 7.0 im Oktober 2006 veröffentlicht. –

+1

Das Konzept kann auf IE 5 & 6 mit ActiveXObjects angewendet werden, wenn Sie wirklich wollte auch –