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 相关文章推荐
Javascript笔记一 js以及json基础使用说明
May 22 Javascript
JS控制日期显示的小例子
Nov 23 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
Feb 25 Javascript
JQuery中Bind()事件用法分析
May 05 Javascript
JS二叉树的简单实现方法示例
Apr 05 Javascript
JavaScript中立即执行函数实例详解
Nov 04 Javascript
分享ES6的7个实用技巧
Jan 18 Javascript
React中阻止事件冒泡的问题详析
Apr 12 Javascript
javascript实现简单搜索功能
Mar 26 Javascript
基于JavaScript实现控制下拉列表
May 08 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
Oct 29 Javascript
React中的Context应用场景分析
Jun 11 Javascript
解决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多线程实现方法及用法实例详解
2015/10/26 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
php查询内存信息操作示例
2019/05/09 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
js实现旋转木马效果
2017/03/17 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
python实现排序算法
2014/02/14 Python
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
对Python的Django框架中的项目进行单元测试的方法
2016/04/11 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
python生成二维码的实例详解
2017/10/29 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
椰子猫砂:CatSpot
2018/08/27 全球购物
C语言面试题
2013/05/19 面试题
大学四年职业生涯规划书范文
2014/01/02 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
英文版辞职信
2015/02/28 职场文书
幽默导游词开场白
2015/05/29 职场文书
岗位聘任协议书
2015/09/21 职场文书
Golang表示枚举类型的详细讲解
2021/09/04 Golang
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python