查看: 146|回复: 2

点击form表单 提交按钮后,表单中的值,到底转换成了什么?

[复制链接]
  • TA的每日心情
    奋斗
    2022-7-25 00:26
  • 签到天数: 1 天

    [LV.1]初来乍到

    5万

    主题

    5万

    帖子

    16万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    167923
    发表于 2022-10-9 19:27:45 | 显示全部楼层 |阅读模式

    开发问题描述:

    今天在写一个提交表单的程序的时候,由于提交数据比较多,而且需要采用ajax无跳转方式提交,所以就采用了一种比较快捷的方式,序列化表单,数据提交成功,但是心里有点疑惑,序列化后的表单为什么可以直接提交给php后台,而且后台也能很方便的接收.?

    序列化后的表单的数据结构

    以上就是该表单通过jQuery序列化后的结果,虽然这样能够很方便的提交大量表单数据,但是就是想不通,为什么这样一个字符序列能够直接提交给后台

    为了搞清楚这个问题,于是在网上查阅了很多资料,并通过几次尝试,基本上搞清了,其中的原理, 要理解这个原理,首先要知道表单提交的过程. 下面着重分析下表单提交的过程(不含文件上传部分)

    表单提交过程如下

    (1)确定有效控件

    在这个过程中,浏览器,需要判断待提交表单中,哪些控件是有效控件,哪些控件是无效控件,所谓有效控件就是指,后台能够被后台获取值的控件,具体的分析,已经在上一篇文章中详细描述过,这里就不在赘述了.

    (2)获取控件数据

    第(1)完成之后,浏览器就需要收集有效控件的值,并将其组织成 name=value的形式 多个值之间用 &号分开,其结构类似于

    name1=value1&name2=value2&name3=value3的形式.

    (3)对数据进行编码

    表单对数据的编码方式有很多种,常用主要有两种

    <1> application/x-www-form-urlencoded

    这是表单默认的提交方式,也就是在设置表单编码方式的情况下,表单提交时会默认采用这种网址编码形式,对表单数据进行提交

    具体案例分析如下:

    这里是采用原生的form进行提交,而非ajax提交方式,从中分析,可以看到,当点击提交按钮后,表单确实是被转换成了一段name=value类型的键值对,而且中间用&符号隔开,通过对比可以发现,这个结果和jQuery序列化表单的结果是相同的,

    这样就很明白了,所谓的序列化表单就是使用了js收集表单数据后,通过拼接组装,已达到模拟原生表单提交数据的效果,

    需要注意的是,这种编码方式,只能用于普通的键值对表单提交,而不能用于文件上传,

    <2>multipart/form-data编码方式

    这种编码方式,主要是用来实现文件上传而设置的,它会文件以二进制的形式,放置于请求体中,分段发送给服务器,需要注意的是使用该编码方式时,表单的提交方式必须设置为 method=post,由于时间关系,这里就暂时不放案例了,后续文章会继续介绍.

    (4)发送数据

    最后一步就是将组装好的数据,根据表单的action所指示的服务器地址,进行发送,服务器接收到数据后,根据相关参数,返回客户端所需数据

    以上就是个人所理解的表单提交过程,仅供参考,如有不全或不当之处,欢迎评论,指出,交流学习!!

    回复

    使用道具 举报

    匿名  发表于 2024-10-30 23:29:46
    回复

    使用道具

    匿名  发表于 2024-10-30 23:30:55
    回复

    使用道具

    懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    客服QQ/微信
    921439866 周一至周日:09:00 - 21:00
    致力打造互联网创业第一品牌,学习网上创业赚钱,首选泓嘉网络创业,值得信赖! 泓嘉网络科技 版权所有!

    本站内容均转载于互联网,并不代表泓嘉网立场! 拒绝任何人以任何形式在本站发表与中华人民共和国法律相抵触的言论!。

    信息产业部备案号 豫ICP备2022016396号-1

    QQ|免责声明|广告服务|小黑屋|泓嘉网创 ( 豫ICP备2022016396号-1 )|网站地图

    GMT+8, 2026-4-15 06:11 , Processed in 0.152270 second(s), 26 queries .

    快速回复 返回顶部 返回列表