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 drag拖动代码
Dec 09 Javascript
创建你的第一个AngularJS应用的方法
Jun 16 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
Jun 24 Javascript
DOM中事件处理概览与原理的全面解析
Aug 16 Javascript
jQuery基本选择器和层次选择器学习使用
Feb 27 Javascript
JavaScript中清空数组的三种方式
Mar 22 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
Oct 25 Javascript
Vue兼容ie9的问题全面解决方案
Jun 19 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
Sep 21 Javascript
vue使用axios上传文件(FormData)的方法
Apr 14 Javascript
小程序自动化测试的示例代码
Aug 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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
javascript填充默认头像方法
2018/02/22 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
微信小程序登录换取token的教程
2018/05/31 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
Python编码类型转换方法详解
2016/07/01 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
校园奶茶店创业计划书
2014/01/23 职场文书
党支部公开承诺践诺书
2014/03/28 职场文书
《长相思》听课反思
2014/04/10 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
《社戏》教学反思
2016/02/22 职场文书