Javascript表单序列化原理及实现代码详解


Posted in Javascript onOctober 30, 2020

随着 Ajax 的出现,表单序列化已经成为一种常见需求。在 JavaScript 中,可 以利用表单字段的 type 属性,连同 name 和 value 属性一起实现对表单的序列化。在编写代码之前, 有必须先搞清楚在表单提交期间,浏览器是怎样将数据发送给服务器的。

​1. 对表单字段的名称和值进行 URL 编码,使用和号(&)分隔。

2. 不发送禁用的表单字段。

3. 只发送勾选的复选框和单选按钮。

4. 不发送 type 为"reset"和"button"的按钮。

5. 多选选择框中的每个选中的值单独一个条目。

6. 在单击提交按钮提交表单的情况下,也会发送提交按钮;否则,不发送提交按钮。

7. <select>元素的值,就是选中的<option>元素的 value 特性的值。如果<option>元素没有 value 特性,则是<option>元素的文本值。

在表单序列化过程中,一般不包含任何按钮字段,因为结果字符串很可能是通过其他方式提交的。除此之外的其他上述规则都应该遵循。

基本的表单序列化可以通过遍历表单元素实现,实例代码如下:

function serialize(form){
 var params = [];
 var eles = form.elements;
 
 for (var i = 0;i<ele.length;i++){
  let field = ele[i];
  switch(field.type){
   case "file": 
   case "submit":
   case "reset": 
   case "button":
    break;
   case "radio":
   case "checkbox":
    if(!field.checked){
     break;
    }
    default:
     //不包含没有名字的表单字段 
     if (field.name.length){ 
      parts.push(encodeURIComponent(field.name) + "=" + 
      encodeURIComponent(field.value)); 
     }
  }
 }
  return parts.join("&");
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ASP中进行HTML数据及JS数据编码函数
Nov 11 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
Jan 08 Javascript
使用jQuery操作Cookies的实现代码
Oct 09 Javascript
javascript与cookie 的问题详解
Nov 11 Javascript
indexOf 和 lastIndexOf 使用示例介绍
Sep 02 Javascript
JavaScript中this的四个绑定规则总结
Sep 26 Javascript
js实现图片切换(动画版)
Dec 25 Javascript
js实现会跳动的日历效果(完整实例)
Oct 18 Javascript
Koa日志中间件封装开发详解
Mar 09 Javascript
H5+css3+js搭建带验证码的登录页面
Oct 11 Javascript
Vue实现图书管理小案例
Dec 03 Vue.js
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
解决Vue-cli无法编译es6的问题
Oct 30 #Javascript
Vue2.0 ES6语法降级ES5的操作
Oct 30 #Javascript
Vue自定义表单内容检查rules实例
Oct 30 #Javascript
探索node之事件循环的实现
Oct 30 #Javascript
使用TS来编写express服务器的方法步骤
Oct 29 #Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
Oct 29 #Javascript
vue3.0搭配.net core实现文件上传组件
Oct 29 #Javascript
You might like
PHP 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
php分页查询的简单实现代码
2017/03/14 PHP
PHP getName()函数讲解
2019/02/03 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
python实现无证书加密解密实例
2014/10/27 Python
Python获取任意xml节点值的方法
2015/05/05 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
简单实现python进度条脚本
2017/12/18 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
C有"按引用传递"吗
2016/09/06 面试题
Shell脚本如何向终端输出信息
2014/04/25 面试题
敬老文明号事迹材料
2014/01/16 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
就业协议书怎么填
2014/04/11 职场文书
鉴史问廉观后感
2015/06/10 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android