简单了解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 Event学习第六章 事件的访问
Feb 07 Javascript
动态加载外部javascript文件的函数代码分享
Jul 28 Javascript
js代码实现无缝滚动(文字和图片)
Aug 20 Javascript
浅谈JavaScript 浏览器对象
Jun 03 Javascript
vue分页组件table-pagebar使用实例解析
Nov 15 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
Aug 23 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
Feb 10 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
Feb 17 Javascript
easyui-datagrid开发实践(总结)
Aug 02 Javascript
慕课网题目之js实现抽奖系统功能
Sep 19 Javascript
使用原生js封装的ajax实例(兼容jsonp)
Oct 12 Javascript
原生js+canvas实现贪吃蛇效果
Aug 02 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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
再谈JavaScript线程
2015/07/10 Javascript
JavaScript严格模式详解
2015/11/18 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
详解A标签中href=&quot;&quot;的几种用法
2017/08/20 Javascript
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
jquery实现聊天机器人
2020/02/08 jQuery
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
[00:34]DOTA2上海特级锦标赛 Spirit战队宣传片
2016/03/04 DOTA
一看就懂得Python的math模块
2018/10/21 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
PyTorch中的C++扩展实现
2020/04/02 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
面向对象概念面试题(.NET)
2016/11/04 面试题
临床医学专业学生的自我评价分享
2013/11/21 职场文书
2014教师年度工作总结
2014/11/10 职场文书
英文版辞职信
2015/02/28 职场文书
学习党史心得体会2016
2016/01/23 职场文书
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers
python playwright之元素定位示例详解
2022/07/23 Python