Ajax
JavaScript
Internet Explorer
Comments 11
+1
Спасибо, очень полезная статья, как раз недавно столкнулась с этой проблемой.
+1
Ага, удобно то, что на сервере получаешь сгруппированные данные. Особенно если файл-обрабочик ajax запросов является общим (выступает в роли контроллера-маршрутизатора). Тогда просто необходимо отделять служебные данные (для маршрутизации запроса) от массива пользовательских данных.
Респект за статью! Надеюсь многие возьмут ее себе на вооружение, а то нормального frontend+верстальщика на фрилансе днем с фонарем не сыскать.
-3
>Вешаем функцию на событие клика на кнопку отправки формы:

WAT?
+2
>Главная проблема FormData заключается в Internet explorer (как всегда), а вернее, в его поддержке.
А вы пробовали искать полифил? Из статьи не очень понял, ак вы в итоге решили проблему с ИЕ.
0
Использовал только нативные способы без подключения дополнительных библиотек. С помощью полифила можно просто через for..of перебрать formdata и с помощью set менять данные как нам угодно, но это уже не так интересно. Проблема с ie в итоге обходится с помощью ручной сборки всех данных с формы, а не простым вызовом конструктора к текущей форме.
+1

Сталкивался с ещё одной проблемой 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, пришлось допиливать обёртку для парсинга тела запроса.
    Не сталкивались с таким?
0
Не сталкивался еще, попробовал повторить эту проблему со своим кодом, но все также.
+1

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

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