将form表单序列化serializeArray() 转换成一个对象object

在前后端数据交互的时候,往往需要传递多个参数,这时候,form表单就给我们提供了一个很好的方法。
$("#formid").serializeArray()
serializeArray() 方法通过序列化表单值来创建对象数组(名称和值)。
您可以选择一个或多个表单元素(比如 input 及/或 textarea),或者 form 元素本身。serializeArray() 方法序列化表单元素(类似 .serialize() 方法),返回 JSON 数据结构数据。

<form id="formId">
  <input type="text" name="username"/>
 <input type="text" name="password"/>
</form>

当执行serializeArray()方法时,它就会将input的name属性设置成键,input的value值设置的值(组成键值对),形成一个数组对象。将数据打包传递给后端。

不过这个方法有一个弊端,就是在传递数据的时候,如果对象中存在Date数据类型或者其他无法转换的类型的时候,后台接收数据会抛出异常,springBoot无法自动转换成对象属性。

这个时候,我们可以在前台,将其数组对象转换成对象,在后台用对象接收参数,就可以避免这个问题的发生。具体方法如下:

var trans={
    serialize:function(obj){
        var o ={};
        $.each(obj,function(){
            if(o[this.name]){
                if(!o[this.name].push){
                    o[this.name]=[o[this.name]];
                }
                o[this.name].push(this.value||"");
            }else {
                o[this.name] = this.value || "";
            }
        });
        return o;
    }
}

测试页面:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div>
    <form id="formId">
        <label>账号: <input type="text" name="username"/> </label><br/>
        <label>密码:  <input type="text" name="password"/></label>
        <button type="button"onclick="transData()">提交</button>
    </form>

</div>
<script type="text/javascript" src="jquery-3.3.1.min.js"></script>
<script type="text/javascript">

    function transData(){
        var _data = ($("#formId").serializeArray());
        console.log(_data);
        _newData = trans.serialize( _data );
        console.log( _newData );
    }

    var trans={
        serialize:function(obj){
            var o ={};
            $.each(obj,function(){
                if(o[this.name]){
                    if(!o[this.name].push){
                        o[this.name]=[o[this.name]];
                    }
                    o[this.name].push(this.value||"");
                }else {
                    o[this.name] = this.value || "";
                }
            });
            return o;
        }
    }

</script>
</body>
</html>

结果如图:
在这里插入图片描述
这就可以避免后台接收数据时报异常的方法了!
这段代码非常实用,有不足的地方请自己改进吧!也可留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值