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 相关文章推荐
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
Jan 11 Javascript
Js获取下拉框选定项的值和文本的实现代码
Feb 26 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
Dec 15 Javascript
JSON+Jquery省市区三级联动
Jan 13 Javascript
详解Javascript继承的实现
Mar 25 Javascript
WEB前端实现裁剪上传图片功能
Oct 17 Javascript
Validform表单验证总结篇
Oct 31 Javascript
全面解析node 表单的图片上传
Nov 21 Javascript
js处理层级数据结构的方法小结
Jan 17 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
Nov 06 Javascript
JavaScript刷新页面的几种方法总结
Mar 28 Javascript
微信小程序基于高德地图查找位置并显示文字
Oct 30 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 防止单引号,双引号在接受页面转义
2008/07/10 PHP
PHP 各种排序算法实现代码
2009/08/20 PHP
PHP反向代理类代码
2014/08/15 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
js数组操作常用方法
2014/05/08 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
js实现带农历和八字等信息的日历特效
2016/05/16 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
js的三种继承方式详解
2017/01/21 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
Python Web开发模板引擎优缺点总结
2014/05/06 Python
Python实现CET查分的方法
2015/03/10 Python
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
Python中threading模块join函数用法实例分析
2015/06/04 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
python传到前端的数据,双引号被转义的问题
2020/04/03 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
外贸业务员求职自荐信分享
2013/09/21 职场文书
部队个人年终总结
2015/03/02 职场文书
护士自荐信范文
2015/03/25 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python