简单了解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 相关文章推荐
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
Aug 11 Javascript
Jquery遍历checkbox获取选中项value值的方法
Feb 13 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
Feb 05 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
Sep 08 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
Oct 29 Javascript
vue实现手机号码抽奖上下滚动动画示例
Oct 18 Javascript
Vue组件全局注册实现警告框的实例详解
Jun 11 Javascript
详解VUE里子组件如何获取父组件动态变化的值
Dec 26 Javascript
微信小程序通过js实现瀑布流布局详解
Aug 28 Javascript
Vue.js组件使用props传递数据的方法
Oct 19 Javascript
详解CocosCreator消息分发机制
Apr 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 EOT定界符的使用详解
2008/09/30 PHP
php 操作excel文件的方法小结
2009/12/31 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
JS模式之单例模式基本用法
2015/06/30 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
简单谈谈关于Angular Cli打包的事
2017/09/05 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
不要用强制方法杀掉python线程
2017/02/26 Python
Django验证码的生成与使用示例
2017/05/20 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
Python 实现自动导入缺失的库
2019/10/29 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
python中线程和进程有何区别
2020/06/17 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
关于读书的演讲稿300字
2014/08/27 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
党校党性分析材料
2014/12/19 职场文书
学校开除通知书
2015/04/25 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript