serialize() 是 jQuery 中的一个方法,用于将表单元素的值序列化成 URL 编码的字符串(即 application/x-www-form-urlencoded 格式),以便通过 AJAX 请求发送到服务器。以下是它的核心特性和用法:


核心功能

  1. 自动收集表单值
    遍历指定表单内的所有成功控件(即启用的、有 name 属性的 <input><select><textarea> 等元素)。
  2. 生成标准查询字符串
    格式为:name1=value1&name2=value2&...,可直接用于 URL 或 HTTP 请求体。
  3. 跳过禁用/未选中的元素
    不包含 disabled 状态的元素,未选中的复选框/单选框也不会被序列化。
  4. 处理特殊字符
    自动对值进行 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>

常见场景

  1. AJAX 提交表单
$.ajax({url: "/submit",type: "POST",data: $("#myForm").serialize(), // 直接传递序列化字符串success: function(response) {console.log("提交成功!");}
});
  1. 动态获取表单数据
    无需手动拼接字段,快速获取用户输入。

注意事项

  • 必须包含 name 属性:无 name 属性的元素会被忽略。
  • 多选值处理
    同名元素(如多选 <select multiple> 或同名复选框)会生成多个键值对(如 &interest=sports&interest=music),后端需按数组解析。
  • 文件上传不支持
    serialize() 不包含文件输入(<input type="file">),需用 FormData 替代。

对比其他方法

方法

返回值类型

特点

.serialize()

字符串

直接生成查询字符串

.serializeArray()

对象数组

返回 [{name: "foo", value: "bar"}]

FormData

二进制对象

支持文件上传,需通过 AJAX 发送


何时使用?

  • 需要快速获取表单的文本/选项数据时。
  • 简单 AJAX 提交(非文件上传场景)。
  • 需兼容旧版浏览器(FormData 在 IE10+ 才支持)。

提示:对于现代应用,文件上传或复杂数据建议使用 FormData 对象(需配合 enctype="multipart/form-data")。