【问题标题】:How can I convert form data with multiple sections to json如何将具有多个部分的表单数据转换为 json
【发布时间】:2021-08-02 11:34:32
【问题描述】:

我正在尝试将 html 格式的数据保存为 json。但只有我的最后一行被保存。造成这种情况的原因可能是因为两个部分中的输入名称相同。

但我想要这样的 json 文件:

{"name":"Name1","surname":"Surname1","gender":"f","birthDay":"15","birthMonth":"1","birthYear":"1995 "}, {"name":"Name2","surname":"Surname2","gender":"m","birthDay":"20","birthMonth":"2","birthYear":"2020"}

但现在的输出是:

{"name":"Name2","surname":"Surname2","gender":"m","birthDay":"20","birthMonth":"2","birthYear":"2020 "}

function handleFormSubmit(event) {
            event.preventDefault();

            const data = new FormData(event.target);

            const formJSON = Object.fromEntries(data.entries());


            console.log(JSON.stringify(formJSON))

        }

        const form = document.querySelector('#example-form');
        form.addEventListener('submit', handleFormSubmit);
<div class="container py-4">
        <form id="example-form">
            <div class="row">                
                    <div class="col-md-12 p-0">
                        <div class="col-md-12 form_field_outer p-0" id="app">
                            <div class="row form_field_outer_row">
                                <div class="form-group col-md-2">
                                    <input class="form-control w_90" id="name" name="name" placeholder="Name" type="text" value="" /></div>
                                <div class="form-group col-md-2">
                                    <input class="form-control w_90" id="surname" name="surname" placeholder="Surname" type="text" value="" /></div>
                                <div class="form-group col-md-2">
                                    <select class="form-control" id="gender" name="gender"><option disabled="disabled" selected="selected">Gender</option>
                                        <option value="f">Female</option>
                                        <option value="m">Male</option>
                                        <option value="n">None.</option></select></div>
                                <div class="form-group col">
                                    <input class="form-control w_90" id="birthDay" maxlength="2" name="birthDay" placeholder="Day" type="text" value="" /></div>
                                <div class="form-group col">
                                    <select class="form-control" id="birthMonth" name="birthMonth">
                                        <option disabled="disabled" selected="selected">Month</option>
                                        <option value="1">Jan</option>
                                        <option value="2">Feb</option>
                                        <option value="3">Mar</option>
                                    </select>
                                </div>
                                <div class="form-group col">
                                    <input class="form-control w_90" id="birthYear" maxlength="4" name="birthYear" placeholder="Year" type="text" value="" /></div>
                            </div>
                            <br>    
                            <div class="row form_field_outer_row">
                                <div class="form-group col-md-2">
                                    <input class="form-control w_90" id="name" name="name" placeholder="Name" type="text" value="" /></div>
                                <div class="form-group col-md-2">
                                    <input class="form-control w_90" id="surname" name="surname" placeholder="Surname" type="text" value="" /></div>
                                <div class="form-group col-md-2">
                                    <select class="form-control" id="gender" name="gender"><option disabled="disabled" selected="selected">Gender</option>
                                        <option value="f">Female</option>
                                        <option value="m">Male</option>
                                        <option value="n">None.</option></select></div>
                                <div class="form-group col">
                                    <input class="form-control w_90" id="birthDay" maxlength="2" name="birthDay" placeholder="Day" type="text" value="" /></div>
                                <div class="form-group col">
                                    <select class="form-control" id="birthMonth" name="birthMonth">
                                        <option disabled="disabled" selected="selected">Month</option>
                                        <option value="1">Jan</option>
                                        <option value="2">Feb</option>
                                        <option value="3">Mar</option>
                                    </select>
                                </div>
                                <div class="form-group col">
                                    <input class="form-control w_90" id="birthYear" maxlength="4" name="birthYear" placeholder="Year" type="text" value="" /></div>
                            </div>
                        </div>
                    </div>
                </div>
                <br>
                <div class="col-md ml-0 mt-3 py-3">
                    <div class="col-md-12">
                        <button type="submit" id="submitId" class="btn btn-success float-right "><i class="fa fa-check-circle"></i> Submit</button>
                    </div>
                </div>
        </form>

    </div>

我该如何解决这个问题?

感谢您的回答。

【问题讨论】:

  • id 在整个文档中应该是唯一的,而不仅仅是表单。

标签: javascript html json


【解决方案1】:

您的表单元素必须具有唯一的 idname 值。

所以改变两个出现的情况:

<input id="surname" name="surname">

到这样的事情:

<input id="surname_0" name="person[0][surname]">

第二次出现:

<input id="surname_1" name="person[1][surname]">

(我删除了所有其他属性以提高答案的可读性)

【讨论】:

  • 但我不想这样。我希望将此转换为 json 用于 PUT 方法。而json类型应该是这样的。 [ { "name": "Name1", "surname": "Surname1", "gender": "m", "birthDay": 4, "birthMonth": 12, "birthYear": 1999 }, { "name": "Name2", "surname": "Surname", "gender": "f", "birthDay": 12, "birthMonth": 4, "birthYear": 2015 } ]
  • 如果不将您的 HTML 更改为我的回答中的内容,这是不可能的。否则,表单的第二部分将覆盖第一部分。为什么不想这样改呢?
  • 我的表单上实际上有一个动态的添加按钮。而当这个按钮被点击的时候,同样的section被添加到了html文件中,一共形成了name、surname、gender...等3个section。我正在考虑通过将其转换为 json 来发送所有这些数据。
  • 您不能拥有具有相同 ID 的 HTML 元素。而且你不能有同名的表单元素。你应该解决这个问题。但是,如果您认为自己有更好的主意,那就去吧。
  • 谢谢兄弟的帮助。
猜你喜欢
  • 2021-11-22
  • 2021-01-14
  • 1970-01-01
  • 2022-11-27
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多