前端如何利用form表单传数组

在写前端的时候碰到了传数组的问题,于是我利用form表单测试了一下,如何利用form表单传数组。

form表单的常用形式如下:

<form action="http://192.168.43.158:8082/uploadImage"  method="post" enctype="multipart/form-data">
    <input type="file" name="filename" size="45"><br>
    <input type="submit" name="submit" value="submit">
</form>

根据我目前的需求:传数组

<form action="http://192.168.43.158:8082/game/examination/addMul"  method="post" enctype="multipart/form-data">
    <form>
        <div class="form-control">
            books1:
            <input type="text" name="books[]" />
        </div>
        <br>
        <div class="form-control">
            books2:
            <input type="text" name="books[]" />
        </div>
        <input type="submit" value="Submit" />
    </form>
</form>

关于form表单,一个

表示一行,所以写多个
表示多行,在submit的时候就是一个数组了

Java后端的接收

关于后端我是用的SpringMvc,所以接收传值常用@RequestParam

关于@RequestParam注解,赋值的过程在我看来更像是从map中取值(default key就是变量名),所以我还真不是很确定能取到值

跟随前人的足迹

网上有很多关于此的文章,我找了一个看起来比较靠谱的做法,套到我的代码中去

@PostMapping("/addMul")
    public HashMap addMulQuestion(@RequestParam(value = "books[]", required = false) ArrayList<String> books) {
        System.out.println(books);
        return null;
    }

确实有打印,说明此方法可行
在这里插入图片描述

摸索

各位仔细回看一下代码会发现我的前端代码的name=“books[]”,而后端接收的value的name也是"books[]",那么我是否有理由猜测,其实根本没必要命名成数组,只要名字统一即可,在底层如果有value名字相同的就会自动封装成数组

验证

我将name改成books

<form action="http://192.168.43.158:8082/game/examination/addMul"  method="post" enctype="multipart/form-data">
    <form>
        
        <div class="form-control">
            books1:
            <input type="text" name="books" />
        </div>
        <br>
        <div class="form-control">
            books2:
            <input type="text" name="books" />

        </div>
        <input type="submit" value="Submit" />
    </form>
</form>

后端也做相应的改变

@PostMapping("/addMul")
    public HashMap addMulQuestion(@RequestParam(value = "books[]", required = false) ArrayList<String> books) {


        System.out.println(books);

        return null;
    }

测试结果是:

在这里插入图片描述

  • 我的猜想是对的

为了进一步证实猜想,我用postman再一次验证了一下
在这里插入图片描述
在这里插入图片描述

结论

发送key相同的表单,@RequestParam接收会自动封装成数组

原文链接https://blog.csdn.net/symuamua/article/details/104759182

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端post传给后端数组可以通过以下步骤实现: 1. 首先,在前端页面中创建一个包含要传给后端的数组单。 2. 在单中,使用多个input或select元素,将数组的每个元素作为一个单项。 3. 在前端的JavaScript代码中,获取单的数据,并将它们组织成一个数组。 4. 使用AJAX或fetch等技术,将数组数据通过POST请求发送给后端。 5. 在后端的服务器代码中,接收POST请求,并解析收到的请求体数据。 6. 将解析后的数据按需进行存储、处理或其他操作。 以下是一个简单的示例代码: 前端HTML代码: ``` <form id="postForm" action="backend.php" method="POST"> <input type="text" name="arrayElement[]" value="element1"> <input type="text" name="arrayElement[]" value="element2"> <input type="text" name="arrayElement[]" value="element3"> <button type="submit">提交</button> </form> ``` 前端JavaScript代码: ```javascript const form = document.getElementById('postForm'); form.addEventListener('submit', (e) => { e.preventDefault(); const formData = new FormData(form); const arrayData = Array.from(formData.getAll('arrayElement[]')); fetch(form.action, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(arrayData) }) .then(response => response.json()) .then(data => { console.log(data); // 后续操作 }) .catch(error => { console.error(error); }); }); ``` 后端PHP代码(backend.php): ```php $arrayData = json_decode(file_get_contents('php://input'), true); // 对数组数据进行处理或存储 ``` 这样,通过以上步骤,前端可以将数组数据通过POST请求传给后端进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值