Откат для FormData в IE 8/9

FormData не существует в IE 8/9, но мне нужны эти функции в этих браузерах. Есть ли хороший запасной вариант для этого?

Я бы попытался отправить данные JSON, но мне нужно передать файл на сервер. Я добавляю этот файл вformData в современных браузерах и просто отправьтеXHR запрос. Так какFormData не существует в IE 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!');
    });

Может быть, альтернативой является создание поддельного объекта формы в js и добавление к нему данных?

 Endless20 окт. 2016 г., 10:12
Тогда я представляю вам новые FormDatapolyfill К сожалению, все еще зависит от создания BLOB-объектов ... Может быть, вы также можете использовать это:Blob.js, Для чтения файла вам понадобится флэш
 Ash Blue31 мая 2013 г., 01:09
Любил бы polyfill для метода window.FormData.

Ответы на вопрос(3)

Вы можете отправить файл вручную с помощью XMLHttpRequests, об этом много информацииВот.

Вы можете проверить, может ли браузер использоватьFormData Сначала объект с:

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

МДН имеетэта функция который вы можете изменить для запасного варианта:

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, '+');
 21 янв. 2016 г., 12:44
Эта концепция может быть применена к IE 5 и 6 с ActiveXObjects, если вы действительно хотели
 14 янв. 2016 г., 10:07
@ Карсон Действительно? Согласноen.wikipedia.org/wiki/XMLHttpRequest#History_and_support Microsoft добавила идентификатор объекта XMLHttpRequest к своим языкам сценариев в Internet Explorer 7.0, выпущенном в октябре 2006 года.

Этот ответ не относится строго к вопросу, который вы задали, и по этой причине я понимаю, удалит ли его мод.

Тем не менее, ваш вопрос был тесно связан с проблемой, которую я изучал, котораяhow to offer drag and drop uploads via FormData() with graceful degradation for older browsers?

Есть замечательная библиотека под названиемdropzone.js который предлагает идеальное решение моей проблемы. Возможно, лучшая часть в том, что библиотека предлагает изящную деградацию из коробки для поддержки загрузки файлов в старых браузерах,как подробно здесь.

Перефразируя источник:

Fortunately if the browser is not supported, the dropzone.js library shows a customizable fallback class that contains an input field and a submit button.

Я надеюсь, что эта информация поможет кому-то, кто, как и я, ищет простое в реализации и элегантное решение для загрузки файлов.

Я знаю только одно возможное решение, но на самом деле это не 1-1 запасной вариант для IE. Для отправки файлов невозможно использовать API связи, потому что вы не можете связать поля ввода в старых браузерах, как в современных, использующих FormData. Но вы можете отправить всю форму, используя iframe. Для этого случая вы можете использоватьjquery.form Плагин, поддерживающий XHR DataForm и iframe (данные отправляются с iframe, когда браузер не поддерживает API FormData).

Ваш ответ на вопрос