简单了解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 相关文章推荐
javascript中substr,substring,slice.splice的区别说明
Nov 25 Javascript
window.open不被拦截的实现代码
Aug 22 Javascript
JavaScript 上万关键字瞬间匹配实现代码
Jul 07 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
Jan 04 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
Dec 20 Javascript
Javascript中数组去重与拍平的方法示例
Feb 03 Javascript
jquery实现下拉框左右选择功能
Feb 21 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
Sep 05 Javascript
详解 微信小程序开发框架(MINA)
May 17 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
Jan 08 Javascript
Vue管理系统前端之组件拆分封装详解
Aug 23 Javascript
react的hooks的用法详解
Oct 12 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/04/06 PHP
php中调用其他系统http接口的方法说明
2014/02/28 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
模拟select的代码
2011/10/19 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
AngularJS语法详解
2015/01/23 Javascript
js实现图片缓慢放大缩小效果
2016/08/02 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
vue.js封装switch开关组件的操作
2020/10/26 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
Python如何快速实现分布式任务
2017/07/06 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
Python的log日志功能及设置方法
2019/07/11 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
Django中ORM的基本使用教程
2020/12/22 Python
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
安娜卡列尼娜观后感
2015/06/11 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python