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'}
?
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!
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);
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]);
}
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);
});
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);