Retrait pour FormData dans IE 8/9

FormData n'existe pas dans IE 8/9 mais j'ai besoin de cette fonctionnalité dans ces navigateurs. Y a-t-il un bon repli pour cela?

J'essayerais d'envoyer des données de json, mais je dois transmettre un fichier au serveur. formData ce fichier au formData dans les navigateurs modernes et je soumets simplement une requête XHR . Étant FormData que FormData n'existe pas dans IE 8/9, cela échoue évidemment.

 // 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!'); }); 

Peut-être une alternative est de créer un faux objet de formulaire dans js puis d'ajouter les données à cela?

Je connais une seule solution possible, mais ce n'est pas vraiment un repli 1-1 pour les IE. Il n'y a pas d'API de communication possible pour l'envoi de fichiers, car vous ne pouvez pas lier les champs de saisie dans les anciens navigateurs, comme dans un mode moderne utilisant FormData. Mais vous pouvez envoyer toute la forme en utilisant un iframe. Pour ce cas, vous pouvez utiliser le plugin jquery.form qui prend en charge XHF DataForm et iframe (envoi de données avec iframe lorsque le navigateur ne prend pas en charge FormData API).

Vous pouvez envoyer le fichier manuellement à l'aide de XMLHttpRequests, il y a beaucoup d'informations ici .

Vous pouvez tester si le navigateur peut utiliser l'objet FormData abord avec:

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

MDN a une fonction que vous pourriez modifier pour le repli:

 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, '+');