jQuery序列化表单相关

划水摸鱼的时候研究了jq表单序列化的3种方式,分别是serialize()、serializeArray()、FormData(),在此分享一下!
首先抛出公共的代码部分,如下:

/***** CSS *****/
<style>
    *{
        font-family: 微软雅黑;
    }
    .left{
        float: left;
    }
    .right{
        margin-left: 100px;
        display: inline-block;
    }
    .right textarea{
        width: 300px;
        height: 300px;
        font-size: 16px;
    }
</style>

/***** HTML *****/
<div class="left">
    <form id="personInfo">
        <p>
            <label>姓名:</label>
            <input type="text" name="userName">
        </p>
        <p>
            <label>性别:</label>
            <label><input type="radio" name="sex" value="male">男</label>
            <label><input type="radio" name="sex" value="female">女</label>
        </p>
        <p>
            <label>照片:</label>
            <input type="file" name="photo" accept="image/*">
        </p>
        <p>
            <label>籍贯:</label>
            <input type="text" name="nativePlace">
        </p>
        <p>
            <label>所属部门:</label>
            <input type="text" name="department">
        </p>
        <p>
            <label>联系电话:</label>
            <input type="text" name="phone">
        </p>
        <p>
            <label>入职时间:</label>
            <input type="date" name="entryTime">
        </p>
        <button type="button" onclick="saveInfo()">提交</button>
    </form>
</div>
<div class="right">
    <p>结果:</p>
    <textarea></textarea>
</div>

/***** 引用的JS *****/
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.12.1/jquery.min.js"></script>

serialize():

/***** 主要的JS代码 *****/
<script>
    function saveInfo(){
        var personInfo = $("#personInfo").serialize();
        $(".right textarea").html(personInfo);
    }
</script>

/***** 输出的字符串 *****/
userName=%E5%BC%A0%E4%B8%89&sex=male&nativePlace=%E9%99%95%E8%A5%BF%E8%A5%BF%E5%AE%89&department=%E6%8A%80%E6%9C%AF%E7%A0%94%E5%8F%91%E9%83%A8&phone=1234567890&entryTime=2020-07-02
输出结果

可以看出:
1.取得的字符串中的中文已被编码
2.无法取得照片

/***** 改写后的JS代码 *****/
<script>
    function saveInfo(){
        //默认serialize()方法会编码中文
        var personInfo = $("#personInfo").serialize();
        //将编码的中文解码
        var params = decodeURIComponent(personInfo, true);
        $(".right textarea").html(params);
    }
</script>

/***** 输出的字符串 *****/
userName=张三&sex=male&nativePlace=陕西西安&department=技术研发部&phone=1234567890&entryTime=2020-07-02

小结:serialize()方法序列化表单依赖于input的name属性;默认会编码中文;无法序列化文件输入框

serializeArray():

/***** 主要的JS代码 *****/
<script>
    function saveInfo(){
        var personArr = $("#personInfo").serializeArray();
        //将取得的数组对象转成字符串
        var params = JSON.stringify(personArr);
        $(".right textarea").html(params);
    }
</script>

/***** 输出的字符串 *****/
[{"name":"userName","value":"张三"},{"name":"sex","value":"male"},{"name":"nativePlace","value":"陕西西安"},{"name":"department","value":"技术研发部"},{"name":"phone","value":"1234567890"},{"name":"entryTime","value":"2020-07-02"}]
输出结果

可以看出:
1.取得的是对象数组
2.无法取得照片

/***** 改写后的JS代码 *****/
<script>
    function saveInfo(){
        var personObj = {};
        var personArr = $("#personInfo").serializeArray();
        //组合成新对象
        $.each(personArr, function(i, item){
            personObj[item.name] = item.value;
        });
        //将得到的对象转成字符串
        var params = JSON.stringify(personObj);
        $(".right textarea").html(params);
    }
</script>

/***** 输出的字符串 *****/
{"userName":"张三","sex":"male","nativePlace":"陕西西安","department":"技术研发部","phone":"1234567890","entryTime":"2020-07-02"}

小结:serializeArray()方法序列化表单依赖于input的name属性;默认序列化得到的是对象数组;无法序列化文件输入框

FormData():

注意:FormData()序列化表单依赖于input的name属性,可将整个表单中的输入数据POST到后台,包括输入框的值和文件

/***** 主要的JS代码 *****/
<script>
    function saveInfo(){
        var formData = new FormData($("#personInfo")[0]);
        $.ajax({                
            url: "/Main/AddPersonInfo?Rdm=" + Math.floor(Math.random() * 1000),
            type: "POST",
            dataType: "json",
            async: true,
            cache: false,
            contentType: false, //必要条件
            processData: false, //必要条件
            data: formData,
            success: function (data) {
                //do something
            },
            complete: function (XHR, TS) {
                XHR = null
            },
            error: function (e) {
                alert("服务器太累啦,需要喘口气呢~")
            }
        }); 
    }
</script>
/***** C#取表单中的值 *****/
string userName = Request.Form["userName"];
HttpPostedFileBase File = Request.Files["photo"];

FormData()的其他方法:

//通过FormData构造函数创建一个空对象
var formData = new FormData();

//1.通过append(key, value)在数据末尾追加数据
formData.append("userName", "liujiao");
formData.append("userName", "zhangsan");

//2.通过get(key)与getAll(key)来获取相对应的值
formData.get("userName"); //获取key为userName的第一个值
formData.getAll("userName"); //获取key为userName的所有值,返回值为数组类型

//3.通过set(key, value)来设置修改数据
formData.set("userName", "lisi"); //key值不存在,会添加一条数据;key值存在,会修改对应的value值

//4.通过has(key)来判断是否存在对应的key
formData.has("userName"); //返回值为true或false

//5.通过delete(key)可以删除数据
formdata.delete("userName");

相关参考:点击前往

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348