简单了解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 相关文章推荐
actionscript与javascript的区别
May 25 Javascript
javascript中方便增删改cookie的一个类
Oct 11 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
Mar 18 Javascript
JavaScript中如何通过arguments对象实现对象的重载
May 12 Javascript
AngularJS 视图详解及示例代码
Aug 17 Javascript
JavaScript Date 知识浅析
Jan 29 Javascript
js实现五星评价功能
Mar 08 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
May 09 Javascript
详解AngularJS 模块化
Jun 14 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
Jan 31 jQuery
JS开发 富文本编辑器TinyMCE详解
Jul 19 Javascript
基于Vue全局组件与局部组件的区别说明
Aug 11 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
无阻塞加载脚本分析[全]
2011/01/20 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
python格式化字符串实例总结
2014/09/28 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
python django中8000端口被占用的解决
2019/12/17 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
sklearn+python:线性回归案例
2020/02/24 Python
python Tornado框架的使用示例
2020/10/19 Python
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
软件测试英文面试题
2012/10/14 面试题
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
中秋节主持词
2014/04/02 职场文书
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js