Javascript插入对象以形成数据
我想将对象转换为表单数据。我没有问题,直到我必须添加一个对象到这个 如何将json对象添加到表单数据中 这是我要转换为formData的对象,它必须保持完全相同的格式Javascript插入对象以形成数据,javascript,json,angular,multipartform-data,form-data,Javascript,Json,Angular,Multipartform Data,Form Data,我想将对象转换为表单数据。我没有问题,直到我必须添加一个对象到这个 如何将json对象添加到表单数据中 这是我要转换为formData的对象,它必须保持完全相同的格式 { "product": { "name": "Produit Comp 2", "abbreviation": "prod_comp_2", "quantity": 4, "weight": 100, "tva": 21, "size": 10, "height": 24
{
"product": {
"name": "Produit Comp 2",
"abbreviation": "prod_comp_2",
"quantity": 4,
"weight": 100,
"tva": 21,
"size": 10,
"height": 24,
"width": 23,
"category_id": 91,
"sub_category_id": 88,
"status": 1,
"price_unit": {
"price_day_1": 73.43,
"price_day_2": 74.43,
"price_day_3": 75.43
},
"price_loaded": {
"price_day_1": 75.43,
"price_day_2": 76.43,
"price_day_3": 77.43
},
"price_installation": {
"price_day_1": 78.43,
"price_day_2": 79.43,
"price_day_3": 70.43
},
"price_built_delivered": {
"price_day_1": 71.43,
"price_day_2": 72.43,
"price_day_3": 73.43
}
}}
这是我要转换的实际函数。
我的formdata只缺少price\u单元、price\u加载、price\u安装、price\u构建和交付对象。如何添加它们
private toProductDto(product: Product): FormData {
console.log('service', product);
let formData = new FormData();
if (product.id) { formData.append('id', '' + product.id); }
if (product.name) { formData.append('name', product.name); }
if (product.category) { formData.append('category_id', '' + product.category.id); }
// Set subcategory to null if it's not defined on sending
if (product.sub_category) {
formData.append('sub_category_id', '' + product.sub_category.id);
} else {
formData.append('sub_category_id', null);
}
formData.append('status', '' + product.status);
if (product.image) { formData.append('image', product.image, product.image.name); }
if (product.description) { formData.append('description', '' + product.description); }
if (product.quantity) { formData.append('amount', '' + product.quantity); }
if (product.weight) { formData.append('weight', '' + product.weight); }
if (product.length) { formData.append('length', '' + product.length); }
if (product.width) { formData.append('width', '' + product.width); }
if (product.height) { formData.append('height', '' + product.height); }
if (product.tva) { formData.append('tva', '' + product.tva); }
if (product.options) { formData.append('options', '' + product.options); }
if (product.numbers_players) { formData.append('numbers_players', '' + product.numbers_players); }
return formData;
}
提前感谢你的帮助
这是我要转换为formData的对象,它必须保持完全相同的格式
{
"product": {
"name": "Produit Comp 2",
"abbreviation": "prod_comp_2",
"quantity": 4,
"weight": 100,
"tva": 21,
"size": 10,
"height": 24,
"width": 23,
"category_id": 91,
"sub_category_id": 88,
"status": 1,
"price_unit": {
"price_day_1": 73.43,
"price_day_2": 74.43,
"price_day_3": 75.43
},
"price_loaded": {
"price_day_1": 75.43,
"price_day_2": 76.43,
"price_day_3": 77.43
},
"price_installation": {
"price_day_1": 78.43,
"price_day_2": 79.43,
"price_day_3": 70.43
},
"price_built_delivered": {
"price_day_1": 71.43,
"price_day_2": 72.43,
"price_day_3": 73.43
}
}}
这本身是不可能的。FormData表示一组key=value
对的flat
您需要进行某种形式的序列化
e、 g.使用JSON.stringify
或PHP风格的键名,其中包含[]
然后,您必须解码服务器端代码中的序列化结构。我终于找到了一个解决方案,它是:
private toProductDto(product: Product): FormData {
console.log('service', product);
const formData = new FormData();
if (product.id) { formData.append('[product][id]', '' + product.id); }
if (product.name) { formData.append('[product][name]', product.name); }
if (product.name) { formData.append('[product][abbreviation]', product.abbreviation); }
if (product.category) { formData.append('[product][category_id]', '' + product.category.id); }
// Set subcategory to null if it's not defined on sending
if (product.sub_category) {
formData.append('[product][sub_category_id]', '' + product.sub_category.id);
} else {
formData.append('[product][sub_category_id]', null);
}
formData.append('[product][status]', '' + product.status);
if (product.image) { formData.append('[product][image]', product.image, product.image.name); }
if (product.description) { formData.append('[product][description]', '' + product.description); }
if (product.quantity) { formData.append('[product][quantity]', '' + product.quantity); }
if (product.weight) { formData.append('[product][weight]', '' + product.weight); }
if (product.length) { formData.append('[product][length]', '' + product.length); }
if (product.width) { formData.append('[product][width]', '' + product.width); }
if (product.height) { formData.append('[product][height]', '' + product.height); }
if (product.tva) { formData.append('[product][tva]', '' + product.tva); }
if (product.options) { formData.append('[product][options]', '' + product.options); }
if (product.numbers_players) { formData.append('[product][numbers_players]', '' + product.numbers_players); }
if (product.price_unit) { formData.append('[product][price_unit][price_day_1]', '' + product.price_unit.price_day_1); }
if (product.price_unit) { formData.append('[product][price_unit][price_day_2]', '' + product.price_unit.price_day_2); }
if (product.price_unit) { formData.append('[product][price_unit][price_day_3]', '' + product.price_unit.price_day_3); }
if (product.price_loaded) { formData.append('[product][price_loaded][price_day_1]', '' + product.price_loaded.price_day_1); }
if (product.price_loaded) { formData.append('[product][price_loaded][price_day_2]', '' + product.price_loaded.price_day_2); }
if (product.price_loaded) { formData.append('[product][price_loaded][price_day_3]', '' + product.price_loaded.price_day_3); }
if (product.price_installation) { formData.append('[product][price_installation][price_day_1]', '' + product.price_installation.price_day_1); }
if (product.price_installation) { formData.append('[product][price_installation][price_day_2]', '' + product.price_installation.price_day_2); }
if (product.price_installation) { formData.append('[product][price_installation][price_day_3]', '' + product.price_installation.price_day_3); }
if (product.price_built_delivered) { formData.append('[product][price_built_delivered][price_day_1]', '' + product.price_built_delivered.price_day_1); }
if (product.price_built_delivered) { formData.append('[product][price_built_delivered][price_day_2]', '' + product.price_built_delivered.price_day_2); }
if (product.price_built_delivered) { formData.append('[product][price_built_delivered][price_day_3]', '' + product.price_built_delivered.price_day_3); }
console.log(formData);
return formData;
}
非常感谢您的快速回复,昆汀!:)