首页 > 解决方案 > 将 JSON 数组对象附加到 formdata

问题描述

我有一个名为联系人的 JSON 数组对象:

var contacts = [];

经过一些处理后的值contacts如下:

[{ "Country":"country 1", "Phone":"123" },{ "Country":"country 2", "Phone":"456" }]

现在我想将它添加到表单数据中的“联系人”名称中。为此,我使用:

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 接受联系人集合以及姓名、年龄和联系人等其他字段。

标签: javascriptjqueryjsonapi

解决方案


如果您的 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>


推荐阅读