ネストされたオブジェクトを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.log(req.body)
{
title: 'title',
text: 'text',
preview: '[object Object]'
}
preview: {p_title:'p title', p_text: 'p text'}
の正確な値を取得するにはどうすればよいですか?
オブジェクトをformDataに追加するには、最初に次のように文字列化する必要があります。
_let objToAppend= {
key1: value1,
key2: value2,
}
let formData = new FormDate();
formData.append('obj', JSON.stringify(objToAppend));
_
次に、サーバー側でそれにアクセスするには、最初にJSON.parse()
を使用して解析する必要があります。それが役に立てば幸い!
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]);
}
}
コンソールformData
for (let val of formData.entries()) {
console.log(val[0]+ ', ' + val[1]);
}
FormData
の値は自動的にstring
に変換されます。 Blob を使用してそれを試すことができます。
または、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);
});
object-to-formdata を試してください。これは、オブジェクトをFormDataインスタンスに変換する便利なJavaScript関数です。
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);