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 相关文章推荐
Jquery Select操作方法集合脚本之家特别版
May 17 Javascript
JavaScript定义类和对象的方法
Nov 26 Javascript
node.js中使用socket.io的方法
Dec 15 Javascript
基于jQuery实现最基本的淡入淡出效果实例
Feb 02 Javascript
JS实现点击上移下移LI行数据的方法
Aug 05 Javascript
JS组件系列之Bootstrap Icon图标选择组件
Jan 28 Javascript
基于gulp合并压缩Seajs模块的方式说明
Jun 14 Javascript
关于vue.js弹窗组件的知识点总结
Sep 11 Javascript
jQuery实现页面滚动时智能浮动定位
Jan 08 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
Oct 20 Javascript
node puppeteer(headless chrome)实现网站登录
May 09 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
Apr 04 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输入流php://input介绍
2012/09/18 PHP
Web程序工作原理详解
2014/12/25 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
Ajax::prototype 源码解读
2007/01/22 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
JS 设置Cookie 有效期 检测cookie
2017/06/15 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
js实现点击烟花特效
2020/10/14 Javascript
Python lxml模块安装教程
2015/06/02 Python
详解Python中的日志模块logging
2015/06/19 Python
python3实现逐字输出的方法
2019/01/23 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
解决python flask中config配置管理的问题
2019/07/26 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
python 绘制国旗的示例
2020/09/27 Python
Python 中Operator模块的使用
2021/01/30 Python
一份Java笔试题
2012/02/21 面试题
数据库什么时候应该被重组
2012/11/02 面试题
相亲大会策划方案
2014/06/05 职场文书
校庆团日活动总结
2014/08/28 职场文书
如何写股份合作协议书
2014/09/11 职场文书
车辆年检委托书范本
2014/10/14 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书