使用FormData对form表单序列化

本文详细介绍了HTML5中FormData对象的作用,包括序列化表单数据和异步上传二进制文件的方法。同时,深入探讨了如何创建FormData对象及其实用的操作方法,如get、set、delete、append和getAll等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、FormData作用

  1. 将form表单元素的name与value进行组合,实现表单数据的序列化
  2. 异步上传二进制文件

二、创建formData对象

<!-- 创建普通的html表单 -->
<form id="form">
		<input type="text" name="username">
		<input type="password" name="password">
		<!-- type 设置为button,不会触发form 提交 -->
		<input type="button" id="btn" value="提交">
</form>
	
	<script type="text/javascript">
		// 获取按钮
		var btn = document.getElementById('btn');
		// 获取表单 必须为原生的dom元素
		var form = document.getElementById('form');
		// 为按钮添加点击事件
		btn.onclick = function () {
			// 将普通的html表单转换为表单对象
			var formData = new FormData(form);
			// 创建ajax对象
			var xhr = new XMLHttpRequest();
			// 对ajax对象进行配置
			xhr.open('post', 'http://localhost:3000/formData');
			// 发送ajax请求
			xhr.send(formData);
			// 监听xhr对象下面的onload事件
			xhr.onload = function () {
				// 对象http状态码进行判断
				if (xhr.status == 200) {
					console.log(xhr.responseText);
				}
			}
		}
	</script>

三、formData对象操作方法

  1. get(‘key’) 获取表单对象属性的值

  2. set(‘key’, ‘value’) 设置表单对象属性的值

  3. delete(‘key’) 删除表单对象属性中的值

  4. append(key,value)在数据末尾追加数据

  5. getAll(‘user’)获取取key为user的所有值 [‘a’,‘b’]

<!-- 创建普通的html表单 -->
<form id="form">
	<input type="text" name="username">
	<input type="password" name="password">
	<input type="button" id="btn" value="提交">
</form>
<script type="text/javascript">
		// 获取按钮
	var btn = document.getElementById('btn');
		// 获取表单
	var form = document.getElementById('form');
		// 为按钮添加点击事件
	btn.onclick = function () {
			// 将普通的html表单转换为表单对象
	var formData = new FormData(form);
			
	      //获取username的value值
	formData.get('username');
	        //设置username的value值为tom
	formData.set('username','tom');
	console.log(formData.get('username'))// tom
	        //删除 
	formData.delete('password');
	console.log(formData.get('password'))// null
	        //在数据末尾追加
	formData.append('sex','女');
	console.log(formData.get('sex'));//‘女’
	
	        // set('sex','女') 有则修改,没有则添加
	        //append('sex','女') 不管是否存在,都会末尾追加
	formData.append('sex','男');
	
	        //获取所有属性值
	 console.log(formData.getAll('sex')) //  ['女','男']        
</script>
您可以使用Java的Servlet来接收表单序列化数据。首先,您需要将表单数据序列化为字符串,并将其作为请求参数发送到Servlet。然后,您可以使用Java的HttpServletRequest对象来获取这些参数,并将其反序列化为Java对象。 以下是一个简单的示例代码,用于接收名为"formdata"的表单序列化数据: ```java import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FormServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取表单序列化数据 String formData = request.getParameter("formdata"); // 将序列化数据序列化为Java对象 Map<String, String> formMap = null; try (InputStream is = new ByteArrayInputStream(formData.getBytes()); ObjectInputStream ois = new ObjectInputStream(is)) { formMap = (Map<String, String>) ois.readObject(); } catch (ClassNotFoundException e) { e.printStackTrace(); } // 处理表单数据 String name = formMap.get("name"); String email = formMap.get("email"); // 做出响应 response.setContentType("text/html"); response.getWriter().println("<html><body>" + "<h2>Form Data Received:</h2>" + "<p>Name: " + name + "</p>" + "<p>Email: " + email + "</p>" + "</body></html>"); } } ``` 这段代码假设您的表单数据是一个包含"name"和"email"字段的Map对象。您可以根据需要更改此代码以适应您的表单数据格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值