Как мне отправлять файлы (изображения) в массив в PHP через ajax?

#php #jquery

#php #jquery

Вопрос:

 $('.result').click(function(event) {
        var st = JSON.stringify(fileList);
        $.ajax({
            url: 'mailer.php',
            type: 'POST',
            data: st,
        })
        .done(function(data) {
            console.log(st);
        })
        .fail(function() {
            console.log("error");
        })
        .always(function() {
            console.log("complete");
        });
    });
  

Ошибка
https://i.stack.imgur.com/mtsAP.png

Однако, если вы введете просто:

 console.log(fileList);
  

Он показывает все правильно
https://i.stack.imgur.com/kNptA.png

PHP

 <?php 
$data = json_decode($_POST['fileList']);
echo $data;
  

Ответ №1:

Из вывода консоли на втором изображении видно, что fileList это массив файловых объектов. Таким образом, вы должны добавить их к объекту FormData и установить его в качестве data вашего $.ajax() вызова. Попробуйте это:

 $('.result').click(function(event) {
  var fd = new FormData();
  fileList.forEach(file => fd.append(file.name, file));
  
  $.ajax({
      url: 'mailer.php',
      type: 'POST',
      data: fd,
      contentType: false, // required when sending FormData
      processData: false // required when sending FormData
    }).done(function(data) {
      console.log(data);
    }).fail(function() {
      console.log("error");
    }).always(function() {
      console.log("complete");
    });
});
  

Оттуда вам нужно будет использовать $_FILES коллекцию в PHP для доступа к файлам, отправленным в запросе, а не $_POST .

Комментарии:

1. Что ж, ошибки исчезли. В журнал добавлены FormData. Могу ли я как-то увидеть, был ли туда добавлен файл?

Ответ №2:

https://i.stack.imgur.com/fYbhv.png 108 строка

 fileList.forEach(file => fd.append(file));