Откат для 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, а затем добавление данных к этому?
Ответы
Ответ 1
Я знаю только одно возможное решение, но это не совсем 1-1 резервное копирование для IE. Для отправки файлов нет возможного API связи, поскольку вы не можете связывать поля ввода в старых браузерах, как в современных, используя FormData. Но вы можете отправить целую форму с помощью iframe. В этом случае вы можете использовать плагин jquery.form, который поддерживает XHR DataForm и iframe (данные отправляются с iframe, если браузер не поддерживает API FormData).
Ответ 2
Вы можете отправить файл вручную с помощью XMLHttpRequests, здесь есть много информации об этом .
Вы можете проверить, может ли браузер использовать объект FormData
сначала:
if(typeof FormData !== 'undefined')
...
MDN имеет эту функцию, которую вы можете изменить для резервного копирования:
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, '+');