Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.09.2023, 03:22
Интересующийся
Отправить личное сообщение для accountnujen Посмотреть профиль Найти все сообщения от accountnujen
 
Регистрация: 23.01.2022
Сообщений: 18

Почему не работает Array.from(value) при переводе formData в массив?
https://codepen.io/accountnujen/pen/...N?editors=1111
document.querySelector("form").addEventListener("submit", function (event) {
  event.preventDefault();
  let datar = {};
  const formData = new FormData(this);
  
  for(let [key, value] of formData.entries()) {
    console.log([key, value]);
    if (key === 'inputFile') {
      let arrpair = Array.from(value);
      console.log(arrpair);
      datar[key] = arrpair.map(file => ({
                        name: file.name,
                        type: file.type,
                        size: file.size
                    }));
    } else {
      datar[key] = value;
    }
  }
  console.log(datar);
});



Почему в конечном итоге arrpair пустой, если value содержит в себе file?
Ответить с цитированием
  #2 (permalink)  
Старый 16.09.2023, 06:56
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Потому, что value не итерируемый и у него нет свойства length.
https://developer.mozilla.org/ru/doc...%D0%B8% 20Set).

Почему не так?

if (key === 'inputFile') {
      datar[key] = {name: value.name, type: value.type, size: value:size};
    } else {


Или все вместе

let datar = Object.fromEntries(formData.entries());


Только зачем бы все это?

Последний раз редактировалось voraa, 16.09.2023 в 07:59.
Ответить с цитированием
  #3 (permalink)  
Старый 16.09.2023, 08:35
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,586

voraa, fromEntries как раз тут не катит, т.к. multipart/form-data создаёт по отдельной записи с одинаковым именем на каждый файл.
Тут нужно юзать formData.getAll() или собирать массив руками.
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 16.09.2023, 18:11
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от Aetae
fromEntries как раз тут не катит, т.к. multipart/form-data создаёт по отдельной записи с одинаковым именем на каждый файл.
Тогда и первый вариант не прокатит, т.к у всех файлов будет key === 'inputFile'
Ответить с цитированием
  #5 (permalink)  
Старый 17.09.2023, 06:23
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,586

voraa, так в этом и вопрос автора.)
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 17.09.2023, 11:27
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от Aetae
voraa, так в этом и вопрос автора.)
Тогда вопрос к автору, что ему нужно.
Можно, если полей с одним именем несколько (не только для file) делать массив значений
что то типа такого
document.querySelector("form").addEventListener("submit", function (event) {
  event.preventDefault();
  let datar = {};
  const formData = new FormData(this);
   
  for(let [key, value] of formData.entries()) {
    console.log([key, value]);
    if (key === 'inputFile') {
        value = {name: value.name, type: value.type, size: value:size};
    }
    if (datar[key] === undefined) {
        datar[key] = value;
    } else {
        if (!Array.isArray(datar[key])) datar[key] = [datar[key]]
        datar[key].push(value);
    }
  }
  console.log(datar);
});
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не работает слайдер при первой загрузки страницы Nailya jQuery 7 08.09.2016 16:33
При загрузке не работает, по F5 работает trillian Events/DOM/Window 1 05.12.2014 19:37
Не работает console.log.apply(this,arguments) - Почему? Почемучкин Javascript под браузер 9 31.10.2014 17:17
почему один вызов load работает, а другой - нет kravru jQuery 1 16.09.2013 20:51
При наборе адреса с www не работает AJAX (JQuery)! madmis AJAX и COMET 3 23.11.2009 19:03