web-dev-qa-db-fra.com

FormData ajoute un objet imbriqué

Est-il possible d'ajouter un objet imbriqué à FormData?

let formData = new FormData();
let data = {
    title: 'title',
    text: 'text',
    preview: {p_title:'p title', p_text: 'p text'}
};

$.each(data, function(key, value) {
    formData.append(key, value);
});

Console du serveur - console.log (req.body)

{
    title: 'title',
    text: 'text',
    preview: '[object Object]'
}

Comment obtenir la valeur exacte de preview: {p_title:'p title', p_text: 'p text'}?

7
ShibinRagh

Pour ajouter un objet à formData, vous devez d'abord le stringifier, comme ceci:

let objToAppend= {
  key1: value1,
  key2: value2,
}
let formData = new FormDate();
formData.append('obj', JSON.stringify(objToAppend));

Ensuite, côté serveur, pour y accéder, vous devez d'abord l'analyser à l'aide de JSON.parse(). J'espère que ça aide!

1
Harshit Agarwal

Voici une "fonction JavaScript pratique qui convertit un objet en une instance FormData" github , également disponible en package npm , très simple à utiliser

let data = {
    title: 'title',
    text: 'text',
    preview: {p_title:'p title', p_text: 'p text'}
};

var formData = objectToFormData(data);
1
Omar Herrera
let formData = new FormData();
let data = {
  title: 'title',
  text: 'text',
  preview: {p_title:'p title', p_text: 'p text'}
};

for(let dataKey in data) {
  if(dataKey === 'preview') {
    // append nested object
    for (let previewKey in data[dataKey]) {
      formData.append(`preview[${previewKey}]`, data[dataKey][previewKey]);
    }
  }
  else {
    formData.append(dataKey, data[dataKey]);
  }
}

Formulaire de console

for (let val of formData.entries()) {
  console.log(val[0]+ ', ' + val[1]); 
}
1
sultan aslam

FormData les valeurs sont automatiquement converties en string. Vous pouvez essayer de le faire en utilisant Blob .

Ou mettez-le simplement sous forme de chaîne en utilisant JSON.stringify(obj).

$.each(data, function(key, value){
    if (typeof(value) === 'object') {
        value = new Blob([JSON.stringify(value)], {type : 'application/json'});// or just JSON.stringify(value)
    }
    formData.append(key, value);
});
1
Orest Savchak

Essayez object-to-formdata . Il s'agit d'une fonction JavaScript pratique qui convertit les objets en instances FormData.

import { objectToFormData } from 'object-to-formdata';

const object = {
  /**
   * key-value mapping
   * values can be primitives or objects
   */
};

const options = {
  /**
   * include array indices in FormData keys
   * defaults to false
   */
  indices: false,

  /**
   * treat null values like undefined values and ignore them
   * defaults to false
   */
  nullsAsUndefineds: false,

  /**
   * convert true or false to 1 or 0 respectively
   * defaults to false
   */
  booleansAsIntegers: false,
};

const formData = objectToFormData(
  object,
  options, // optional
  existingFormData, // optional
  keyPrefix, // optional
);

console.log(formData);
0
Sagar Ranglani