简单了解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 prototype,executing,context,closure
Dec 24 Javascript
JavaScript继承方式实例
Oct 29 Javascript
浅析ajax请求json数据并用js解析(示例分析)
Jul 13 Javascript
对比分析json及XML
Nov 28 Javascript
编写高性能Javascript代码的N条建议
Oct 12 Javascript
实例详解jQuery表单验证插件validate
Jan 18 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
Dec 13 Javascript
微信小程序之picker日期和时间选择器
Feb 09 Javascript
vue2.0构建单页应用最佳实战
Apr 01 Javascript
angular实现spa单页面应用实例
Jul 10 Javascript
vue路由守卫,限制前端页面访问权限的例子
Nov 11 Javascript
原生jQuery实现只显示年份下拉框
Dec 24 jQuery
通过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的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
php简单的上传类分享
2016/05/15 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
JavaScript进阶(一)变量声明提升实例分析
2020/05/09 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
python regex库实例用法总结
2021/01/03 Python
Reformation官网:美国女装品牌
2018/09/14 全球购物
数控技术专业毕业自荐书范文
2014/02/05 职场文书
体育专业求职信
2014/07/16 职场文书
学习教师敬业奉献模范事迹材料思想汇报
2014/09/19 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
小学母亲节活动总结
2015/02/10 职场文书
辞职申请书范本
2019/05/20 职场文书
关于使用Redisson订阅数问题
2022/01/18 Redis