前后端通信中的 表单序列化:原生JS实现、jQuery实现
2018-01-26 17:26
381 查看
一、FormData 概述
FormData 是在 XMLHttpRequest 2级定义的作用: 创建 后台需要的 表单格式的数据,便于 XHR传输
适用于: post请求表单序列化(支持上传文件的表单)
兼容: IE9-浏览器不支持
二、创建 FormData 实例
语法:var formData = new FormData()
构造函数
FormData可接受一个参数:form 表单这个DOM对象(约束:每一项表单必须要有 name 属性)
举例:
<form id="myForm" action="" method="post"> <input type="text" name="name">名字 <input type="password" name="psw">密码 <input type="submit" value="提交"> </form>
// 获取页面已有的一个form表单 var form = document.getElementById("myForm"); // 用表单来初始化 var formData = new FormData(form); $.ajax({ url: "server.php", type: "POST", data: formData, processData: false, // 不处理数据 contentType: false // 不设置内容类型 });
三、FormData对象的 操作方法
获取数据:get( ) / getAll( )
语法:formData.get(name): 获取 key 为 name 的第一个值
formData.getAll(name): 返回一个数组,获取 key 为 name 的所有值
添加数据:append( )
语法:formData.append(key, value)
如果指定的key不存在则会新增一条数据,如果key存在,则添加到数据的末尾
formData.append("k1", "v1"); formData.append("k1", "v2"); formData.append("k1", "v1"); formData.get("k1"); // "v1" formData.getAll("k1"); // ["v1","v2","v1"]
设置数据:set( )
语法:formData.set(key, value)
如果指定的key不存在则会新增一条,如果存在,则会修改对应的value值
formData.append("k1", "v1"); formData.set("k1", "1"); formData.getAll("k1"); // ["1"]
判断存在:has( )
语法:formData.has(key)
用来判断FormData 对象是否含有该 key;返回 布尔值
删除数据:delete( )
语法:formData.delete(key)
删除指定 key 的值,如果有多个相同 key 值,会一并删除
遍历数据:keys( ) / values( ) / entries( )
三种方法,都返回一个迭代器语法:
formData.keys( ):返回的迭代器中 每一项为 formData 对象的 key 值
formData.values( ):返回的迭代器中 每一项为 formData 对象的 value 值
formData.entries( ):返回的迭代器中 每一项为 formData 对象的 [key, value] 数组
四、原生 JS 封装 表单序列化方法
function serialize(form) { var parts = [], elems = form.elements, i = 0, len = elems.length, filed = null; for (; i < len; i++) { filed = elems[i]; switch (filed.type) { case "select-one": case "select-multiple": if (filed.name.length) { var j = 0, opt, optLen = filed.options.length; for (; j < optLen; j++) { opt = filed.options[j]; if (opt.selected) { parts.push(encodeURIComponent(filed.name) + "=" + encodeURIComponent(opt.value)); } } } break; case undefined: case "submit": case "reset": case "file": case "button": break; case "radio": case "checkbox": if (!filed.checked) { break; } default: if (filed.name.length && filed.value) { parts.push(encodeURIComponent(filed.name) + "=" + encodeURIComponent(filed.value)); } } } return parts.join("&"); }
五、jQuery 中的表单序列化
将表单 序列化成 queryString 字符串:serialize( )
适用于: get 请求 的表单序列化将表单 序列化成 对象数组:serializeArray( )
适用于: post 请求 的表单序列化细节约束
以上两种 jQuery 的表单序列化方法,表单都需要有 name 属性以上两种方式:只能传递一般的参数,上传文件的文件流是无法被序列化并传递的
示例如下
<body> <form> <input type="checkbox" name="fruit" value="apple" /> apple <input type="checkbox" name="fruit" value="orange" checked="checked" /> orange <input type="radio" name="sex" value="male" checked="checked" /> male <input type="radio" name="sex" value="female" /> female </form> <button id="btn">submit</button> </body>
<script> document.getElementById('btn').addEventListener('click', () => { console.log($("form").serialize()); // fruit=orange&sex=male console.log(JSON.stringify($("form").serializeArray())); // [{"name":"fruit","value":"orange"},{"name":"sex","value":"male"}] }) </script>
相关文章推荐
- 原生js实现form表单序列化
- 原生js实现form表单序列化的方法
- 原生js实现获取form表单数据
- jQuery实现form表单元素序列化为json对象的方法
- 原生JS与jQuery对AJAX的实现
- 原生js和jQuery实现页面跳转的学习
- jquery-form.js 实现图片和表单一同提交
- jQuery中验证表单提交方式及序列化表单内容的实现
- 利用jquery.form.js的ajaxSubmit实现不跳转提交表单数据
- 原生js和jquery分别实现伸缩菜单的制作-水平方向导航栏
- 解决原生js或jQuery 实现父窗口的问题,如window.parent.document.getElementById()
- 原生js和jquery两种方式实现tab切换
- 习惯了使用jQuery的ajax方法,看看原生js使用xmlhttpRequest实现ajax请求
- 原生JS和jQuery版实现文件上传功能
- 原生js和jquery实现图片轮播特效
- 使用jQuery或者原生js实现鼠标滚动加载页面新数据
- js原生方式实现jquery中的append()方法
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- Play FrameWork 使用jquery.form.js实现无刷新提交带文件的表单
- 原生js方式实现ajax,并仿jquery方式简单调用