Comments
Спасибо, очень полезная статья, как раз недавно столкнулась с этой проблемой.
Ага, удобно то, что на сервере получаешь сгруппированные данные. Особенно если файл-обрабочик ajax запросов является общим (выступает в роли контроллера-маршрутизатора). Тогда просто необходимо отделять служебные данные (для маршрутизации запроса) от массива пользовательских данных.
Респект за статью! Надеюсь многие возьмут ее себе на вооружение, а то нормального frontend+верстальщика на фрилансе днем с фонарем не сыскать.
>Главная проблема FormData заключается в Internet explorer (как всегда), а вернее, в его поддержке.
А вы пробовали искать полифил? Из статьи не очень понял, ак вы в итоге решили проблему с ИЕ.
Использовал только нативные способы без подключения дополнительных библиотек. С помощью полифила можно просто через for..of перебрать formdata и с помощью set менять данные как нам угодно, но это уже не так интересно. Проблема с ie в итоге обходится с помощью ручной сборки всех данных с формы, а не простым вызовом конструктора к текущей форме.

Сталкивался с ещё одной проблемой IE:
Файл отправлялся на сервер, условно говоря, вот так:


/**
 * @param {Blob} file
 */
function sendFile(file) {
    var XmlHttpObject = new XMLHttpRequest(),
        form = new FormData();
    form.append('file', file);
    XmlHttpObject.send(form);
}

В результате запрос на бэкэнд приходил:


  • В случае любых браузеров, кроме IE: с заголовком Content-Type: multipart/form-data и содержимым файла в соответствующем виде в теле запроса.
  • В случае IE: с заголовком Content-Type: application/x-www-form-urlencoded (хотя тело запроса было как в случае multipart/form-data).
    Это, в частности, препятствовало привычному использованию php-шного массива $_FILES, пришлось допиливать обёртку для парсинга тела запроса.
    Не сталкивались с таким?
Не сталкивался еще, попробовал повторить эту проблему со своим кодом, но все также.

Также — в смысле "проблемы нет", или в смысле "такая же проблема"?

Only those users with full accounts are able to leave comments. Log in, please.