简单了解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开发包大全整理
Dec 22 Javascript
JavaScript 特殊字符
Apr 05 Javascript
js 加载时自动调整图片大小
May 28 Javascript
javascript 学习笔记(一)DOM基本操作
Apr 08 Javascript
关于js数组去重的问题小结
Jan 24 Javascript
table行随鼠标移动变色示例
May 07 Javascript
通过$(this)使用jQuery包装后的方法或属性
May 18 Javascript
jQuery实现简单的间隔向上滚动效果
Mar 09 Javascript
vue下拉列表功能实例代码
Apr 08 Javascript
vue项目强制清除页面缓存的例子
Nov 06 Javascript
JavaScript原型继承和原型链原理详解
Feb 04 Javascript
将Vue组件库更换为按需加载的方法步骤
May 06 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数组查找函数总结
2014/11/18 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
原生JS实现的双色球功能示例
2018/02/02 Javascript
vue实现文件上传功能
2018/08/13 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
Python3实现从文件中读取指定行的方法
2015/05/22 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
使用Python的datetime库处理时间(RPA流程)
2019/11/24 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
python解包用法详解
2021/02/17 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
营销与策划专业毕业生求职信
2013/11/01 职场文书
村官学习十八大感想
2014/01/15 职场文书
正风肃纪剖析材料
2014/02/18 职场文书
《太阳》教学反思
2014/02/21 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
医院见习总结
2015/06/24 职场文书
导游词之杭州西湖
2019/09/19 职场文书
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
Mysql分库分表之后主键处理的几种方法
2022/02/15 MySQL