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 相关文章推荐
你所要知道JS(DHTML)中的一些技巧
Jan 09 Javascript
Locate a File Using a File Open Dialog Box
Jun 18 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
Aug 22 Javascript
JavaScript设计模式学习之“类式继承”
Mar 12 Javascript
JQuery中Bind()事件用法分析
May 05 Javascript
TypeScript 学习笔记之基本类型
Jun 19 Javascript
jQuery蓝色风格滑动导航栏代码分享
Aug 19 Javascript
浅析jQuery Mobile的初始化事件
Dec 03 Javascript
javascript实现简单加载随机色方块
Dec 25 Javascript
深入浅析Bootstrap列表组组件
May 03 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
Oct 04 Javascript
微信小程序在text文本实现多种字体样式
Nov 08 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中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
js date 格式化
2017/02/15 Javascript
浅谈struts1 &amp; jquery form 文件异步上传
2017/05/25 jQuery
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
React路由鉴权的实现方法
2019/09/05 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
JavaScript实现答题评分功能页面
2020/06/24 Javascript
python实现对一个完整url进行分割的方法
2015/04/29 Python
python3实现暴力穷举博客园密码
2016/06/19 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
Python实现哲学家就餐问题实例代码
2020/11/09 Python
通信专业个人自我鉴定
2013/10/21 职场文书
英文简历中的自我评价用语
2013/12/09 职场文书
企业宣传口号
2014/06/12 职场文书
锦旗标语大全
2014/06/23 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers