简单了解Ajax表单序列化的实现方法


Posted in Javascript onJune 14, 2019

原生表单序列化

随着Ajax的出现,表单序列化已经成为一种需求,在学习原生Ajax时,若用POST方法向后台提交数据时,就需要将表单序列化

在JavaScript中可以利用表单字段的type属性,连同name和value属性,一起实现表单的序列化。

在进行表单序列化之前,需要弄清楚在表单提交期间,浏览器是怎样将数据发送给服务器的。

  • --对表单字段的名称和值进行URL编码,使用和号(&)分隔
  • --不发送禁用的表单字段
  • --只发送勾选的复选框和单选按钮
  • --不发送type为"reset"和"button"的按钮
  • --多选选择框中的每个选中的值单独一个条目
  • --在单击提交按钮提交表单的情况下,也会发送提交按钮,否则不发送提交按钮
  • --<select>元素的值,就是选中的<option>元素的value特性的值。如果<option>元素没有value属性,则就是<option>元素的文本值

实现表单序列化的函数为:

function serialize(form){
var parts=[],
field=null,
i,
len,
j,
optLen,
option,
optValue;
for (i = 0; i < form.elements.length; i++) {
field=form.elements[i];
switch (field.type) {
case 'select-one':
case 'select-multiple':
if(field.name.length){
for (var j = 0; j < field.options.length; j++) {
option=field.options[j];
if (option.selected) {
optValue="";
if (option.hasAttribute) {
optValue=(option.hasAttribute('value') ? option.value : option.text);
}else{
optValue=(option.attribute['value'].specified ? option.value : option.text);
}
parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(optValue));
}
}
}
break;
case undefined: //字段集
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对象数据缓存Cache原理以及jQuery.data详解
Apr 07 Javascript
struts2+jquery组合验证注册用户是否存在
Apr 30 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
Jul 08 Javascript
ie8下修改input的type属性报错的解决方法
Sep 16 Javascript
使用JQuery FancyBox插件实现图片展示特效
Nov 16 Javascript
跟我学习javascript的执行上下文
Nov 18 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
Jan 05 Javascript
论Bootstrap3和Foundation5网格系统的异同
May 16 Javascript
ReactNative Image组件使用详解
Aug 07 Javascript
React根据宽度自适应高度的示例代码
Oct 11 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
Oct 24 Javascript
如何在JS文件中获取Vue组件
Sep 16 Javascript
通过JS深度判断两个对象字段相同
Jun 14 #Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
Jun 14 #Javascript
利用JavaScript将Excel转换为JSON示例代码
Jun 14 #Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
Jun 14 #Javascript
Vue动态创建注册component的实例代码
Jun 14 #Javascript
基于Proxy的小程序状态管理实现
Jun 14 #Javascript
深度了解vue.js中hooks的相关知识
Jun 14 #Javascript
You might like
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
使用C++为node.js写扩展模块
2015/04/22 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
Vue实现web分页组件详解
2017/11/28 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
python实现list由于numpy array的转换
2018/04/04 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
2014年绿化工作总结
2014/12/09 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
js中Object.create实例用法详解
2021/10/05 Javascript
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server