我有一个称为联系人的JSON数组对象:
var contacts = [];
经过一些处理,contacts
的值如下所示:
[{ "Country":"country 1", "Phone":"123" },{ "Country":"country 2", "Phone":"456" }]
现在,我要将其添加到formdata中的“联系人”名称中。为此,我使用:
var formdata = new FormData();
formdata.append("Contacts", JSON.stringify(contacts));
当我在按钮上尝试alert(JSON.stringify(formdata));
时,我得到:
\"Contacts\":\"[{\\\"Country\\\":\\\"country 1\\\",\\\"Phone\\\":\\\"123\\\"},
{\\\"Country\\\":\\\"country 2\\\",\\\"Phone\\\":\\\"456\\\"}]\"}"
问题在于,在API中,它没有检测到联系人列表。 我尝试将POSTMAN用作:
Contacts[0].Country : country 1
Contacts[0].Phone : 123
Contacts[1].Country : country 2
Contacts[1].Phone : 456
在这种情况下,API接受数据。 API接受除此以外的其余formdata字段,只是共享此信息以排除api的问题。
API接受联系人以及其他字段(例如姓名,年龄和联系人)的集合。
答案 0 :(得分:1)
如果您的API接受该格式的数据,则无法将其作为JSON发送,则需要为您提到的每一行创建一个单独的FormData
条目。
例如
const contacts = [{ "Country":"country 1", "Phone":"123" },{ "Country":"country 2", "Phone":"456" }];
var formdata = new FormData();
// This could be made fancier but it explains how to fix the problem
for (let i=0; i < contacts.length; i++) {
formdata.append(`Contacts[${i}].Country`, contacts[i].Country);
formdata.append(`Contacts[${i}].Phone`, contacts[i].Phone);
}
请注意,json-form-data会为您完成
const data = {
Contacts: [{
"Country": "country 1",
"Phone": "123"
}, {
"Country": "country 2",
"Phone": "456"
}]
};
const formData = jsonToFormData(data);
for (const [key,value] of formData.entries()) {
console.log(`${key}: ${value}`);
}
<script src="https://unpkg.com/json-form-data@^1.7.0/dist/jsonToFormData.min.js"></script>