iNickolay
@iNickolay

Как отправить файлы с помощью FormData?

Здравствуйте! Имеем некоторую форму, в которую добавляем картинки:
ejs('#add_images').change(function (event) {
        let files = this.files;

        for (let i = 0; i < files.length; i++) {
            // Всяческие проверки

            preview(file);
        }
    });


В функции preview() мы производим некоторые манипуляции (которые не имеют значения) и добавляем файл в определенный массив:
function preview (file) {
        reader.addEventListener('load', function (event) {
            // ...
            queue[file.name] = file;
        });
    }


Ну и просто отправляем форму:
form.on('submit', function(event) { event.preventDefault();
        let formData = new FormData(),
            id;

        for (id in queue) {
            formData.append('images', queue[id]);
            // formData.append('images[' + id + ']', queue[id]); - не работает!
            // formData.append('images[]', queue[id]); - не работает!
        }

        sendFormData(
            '/test',
            formData
        ).then(function (response) {
            console.log(response); // всегда возвращает array(0) {}
        });

        return false;
    });


sendFormData - обёртка для Promise:
function sendFormData(url, data) {
    return new Promise(function(resolve, reject) {
        let request = new XMLHttpRequest();

        request.open('post', url);
        request.onload = function() {
            if (request.status == 200) {
                resolve(request.response);
            } else {
                reject(Error(request.statusText));
            }
        };

        request.onerror = function() {
            reject(Error("Network Error"));
        };

        request.send(data);
    });
};


На стороне PHP возвращаю просто var_dump:
var_dump($_POST);

И всегда возвращается
array(0) {}
Хотя изображения присутствуют в FormData.
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
нужно указать параметры ajax запроса
processData: false,
contentType: false,
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы