serialize()
是 jQuery 中的一个方法,用于将表单元素的值序列化成 URL 编码的字符串(即 application/x-www-form-urlencoded
格式),以便通过 AJAX 请求发送到服务器。以下是它的核心特性和用法:
核心功能
- 自动收集表单值
遍历指定表单内的所有成功控件(即启用的、有name
属性的<input>
、<select>
、<textarea>
等元素)。 - 生成标准查询字符串
格式为:name1=value1&name2=value2&...
,可直接用于 URL 或 HTTP 请求体。 - 跳过禁用/未选中的元素
不包含disabled
状态的元素,未选中的复选框/单选框也不会被序列化。 - 处理特殊字符
自动对值进行 URL 编码(如空格转+
,特殊字符转%XX
)。
基本语法
$(selector).serialize();
selector
:通常是表单元素(如$('form')
),也可以是包含表单控件的容器(如$('.form-class')
)。
示例代码
<form id="myForm"><input type="text" name="username" value="John"><input type="checkbox" name="interest" value="sports" checked> Sports<select name="country"><option value="us" selected>USA</option><option value="uk">UK</option></select>
</form><script>const queryString = $("#myForm").serialize();console.log(queryString); // 输出:"username=John&interest=sports&country=us"
</script>
常见场景
- AJAX 提交表单
$.ajax({url: "/submit",type: "POST",data: $("#myForm").serialize(), // 直接传递序列化字符串success: function(response) {console.log("提交成功!");}
});
- 动态获取表单数据
无需手动拼接字段,快速获取用户输入。
注意事项
- 必须包含
name
属性:无name
属性的元素会被忽略。 - 多选值处理:
同名元素(如多选<select multiple>
或同名复选框)会生成多个键值对(如&interest=sports&interest=music
),后端需按数组解析。 - 文件上传不支持:
serialize()
不包含文件输入(<input type="file">
),需用FormData
替代。
对比其他方法
方法 | 返回值类型 | 特点 |
| 字符串 | 直接生成查询字符串 |
| 对象数组 | 返回 |
| 二进制对象 | 支持文件上传,需通过 AJAX 发送 |
何时使用?
- 需要快速获取表单的文本/选项数据时。
- 简单 AJAX 提交(非文件上传场景)。
- 需兼容旧版浏览器(
FormData
在 IE10+ 才支持)。
提示:对于现代应用,文件上传或复杂数据建议使用
FormData
对象(需配合enctype="multipart/form-data"
)。