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 相关文章推荐
FCK调用方法..
Dec 21 Javascript
建议大家看下JavaScript重要知识更新
Jul 08 Javascript
JavaScript中两种链式调用实现代码
Jan 12 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
Nov 09 Javascript
jquery获取元素索引值index()示例
Feb 13 Javascript
js获取上传文件大小示例代码
Apr 10 Javascript
javascript中call apply 与 bind方法详解
Mar 10 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
Oct 01 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
bootstrap模态框关闭后清除模态框的数据方法
Aug 10 Javascript
Paypal支付不完全指北
Jun 04 Javascript
vue3使用vue-count-to组件的实现
Dec 25 Vue.js
解决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中的一个中文字符串截取函数
2007/02/14 PHP
Discuz 模板引擎的封装类代码
2008/07/18 PHP
php自定义函数之递归删除文件及目录
2010/08/08 PHP
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
jQuery实现火车票买票城市选择切换功能
2017/09/15 jQuery
Vue结合后台导入导出Excel问题详解
2019/02/19 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
python单链表实现代码实例
2013/11/21 Python
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
Python中生成Epoch的方法
2017/04/26 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
电大自我鉴定范文
2013/10/01 职场文书
工程技术员岗位职责
2014/03/02 职场文书
大学信息公开实施方案
2014/03/09 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server