← jQuery unwrap()方法:移除元素的父容器 jQuery serializeArray()方法:把表单数据变成对象数组 →

jQuery serialize()方法:表单数据的序列化处理

原创 2026-04-30 jQuery 已有人查阅

前端开发里,处理表单数据然后发送给后端是一个非常高频的需求。传统做法是一个一个获取输入框的值,手动拼接成键值对字符串,既麻烦又容易遗漏字段。jQuery 的 serialize() 方法就是用来解决这个痛点的——它能把整个表单的数据一次性转换成标准的 URL 编码字符串,直接用于 AJAX 请求或者拼接到 URL 后面。

这个方法处理的对象包括 <input><textarea><select> 等表单控件,自动提取 name 属性和对应的 value,按照 key=value&key=value 的格式拼接好,空格转成 +,特殊字符做百分号编码。整个过程全自动,不用手动遍历。

语法形式

$(selector).serialize()

selector 通常指向一个 form 元素,也可以是包含一组表单控件的容器。方法返回一个字符串,格式符合 application/x-www-form-urlencoded 规范。

基础示例:序列化表单数据

下面这个示例展示了 serialize() 的基本用法。页面上有一个简单的表单,包含两个输入框,点击按钮后将序列化结果显示在下方。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>serialize 基础示例</title>
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
    <form id="userForm">
        用户名:<input type="text" name="username" value="zhangsan"><br><br>
        邮箱:<input type="text" name="email" value="alan@ebingou.cn"><br><br>
    </form>
    <button id="serializeBtn">序列化表单数据</button>
    <p id="result" style="margin-top:10px;font-weight:bold;"></p>

    <script>
        $(document).ready(function(){
            $("#serializeBtn").click(function(){
                $("#result").text($("#userForm").serialize());
            });
        });
    </script>
</body>
</html>

点击按钮后,#result 中显示的内容是:

username=zhangsan&email=alan%40ebingou.cn

注意邮箱地址里的 @ 被自动编码成了 %40,这符合 URL 编码规范。如果你需要把这个字符串直接拼到 GET 请求的 URL 后面,或者作为 POST 请求的 data 参数传给 $.ajax(),格式都是现成的。

serialize() 只序列化“成功控件”

这里有一个很重要的概念需要理解:serialize() 只会处理“成功控件”(successful controls)。按照 HTML 表单规范,一个表单控件要被序列化,必须同时满足几个条件:

  • 有 name 属性,且值不为空

  • 没有被 disabled 禁用

  • 对于复选框和单选按钮,必须是选中状态

  • 对于 <select> 中的选项,必须有选中的值

这个机制意味着,如果你给输入框设置了 disabled 属性,或者忘记写 nameserialize() 会直接跳过它,不会报错也不会有任何提示。这是个双刃剑——好处是自动过滤不符合条件的控件,坏处是如果你不小心忘了 name,排查起来可能要花点时间。

serialize() 的实际应用场景

日常开发中,serialize() 用得比较多的地方:

AJAX 表单提交: 配合 $.post() 或 $.ajax(),直接把序列化结果当 data 传过去。

$.post("/api/submit", $("#userForm").serialize(), function(response){
    console.log("提交成功", response);
});

比手动拼 {username: $("#username").val(), email: $("#email").val()} 这种写法要简洁很多。字段少的时候还不觉得,一旦表单有十几个字段,serialize() 一行搞定,手动拼接很容易漏或多。

搜索过滤参数的拼接: 页面上的筛选条件表单,用 serialize() 一把生成查询字符串,拼到 URL 上做数据请求。

表单数据暂存: 用户填写了一半的表单,用 serialize() 序列化后存进 localStorage,下次回来再还原。

关于文件上传的提醒

serialize() 不能处理文件输入框(<input type="file">)。如果你需要上传文件,得用 FormData 对象来封装表单数据。这是在面试和实际项目中经常被问到的一个点。遇到包含文件上传的表单时,我一般直接绕过 serialize(),统一用 FormData 配合 $.ajax() 处理,能兼容文本字段和文件字段。

和 serializeArray() 的区别

serialize() 返回的是字符串,适合直接拼 URL 或作为请求参数。jQuery 还提供了一个 serializeArray() 方法,返回的是 JSON 对象数组,格式像这样:

[
    {name: "username", value: "zhangsan"},
    {name: "email", value: "alan@ebingou.cn"}
]

如果你拿到序列化数据后还需要做修改、过滤或增加字段,用 serializeArray() 会更方便,因为操作对象数组比解析字符串要直接得多。改完后再用 $.param() 转回字符串就是。我的习惯是:直接提交用 serialize(),需要二次处理用 serializeArray()

本节课程知识要点

  • serialize() 将表单控件的 name 和 value 组合成 URL 编码字符串,格式为 key=value&key=value

  • 只处理“成功控件”,即必须同时具备:有 name 属性、没有被 disabled、复选框/单选框处于选中状态。

  • 特殊字符会自动进行百分号编码,可以直接用于 AJAX 请求的 data 参数。

  • 不能序列化文件输入框的内容,需要上传文件时应使用 FormData

  • 配合 serializeArray() 和 $.param() 可以实现序列化、修改、再转字符串的完整处理流程。

serialize() 是 jQuery 表单处理能力中的一个实用工具。它把遍历控件、提取值、URL 编码、拼接字符串这一系列操作封装成一个方法调用,省去了大量模板代码。理解清楚它的适用条件——需要 name、不能 disabled、不处理文件——就能在项目中安心使用。配合 AJAX 提交和表单数据处理的其他环节,这个方法是前端数据交互流程中比较实用的一环。

← jQuery unwrap()方法:移除元素的父容器 jQuery serializeArray()方法:把表单数据变成对象数组 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号