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")。
