系列文章
关于前端上传文件全面基础扫盲贴(零)
关于前端上传文件全面基础扫盲贴(一) ----- XMLHttpRequest
关于前端上传文件全面基础扫盲贴(二) ----- File
关于前端上传文件全面基础扫盲贴(三) ----- FormData
关于前端上传文件全面基础扫盲贴(四) ----- FileReader
关于前端上传文件全面基础扫盲贴(五) ----- H5拖拽事件
关于前端上传文件全面基础扫盲贴(六) ----- 图片上传,旋转,重绘,预览等实战(附DEMO)
FormData对象(知识点主要来源于关于FormData API)
摘自上面来源,分析的挺好,我就无耻得搬下来了FormData 对象的使用(直接看这个有点蒙圈,建议先看API再看这个实战代码好点,我就是踩过坑的人...╮(╯▽╰)╭)
通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对。它可以更灵活方便的发送表单数据,因为可以独立于表单使用。如果你把表单的编码类型设置为multipart/form-data ,则通过FormData传输的数据格式和表单通过submit() 方法传输的数据格式相同,与普通的ajax相比,使用FormData的最大优点就是可以异步上传二进制文件
FormData对象FormData对象可以把所有表单元素的name与value组成一个queryString,提交到后台。 在使用ajax提交时,使用FormData对象可以减少拼接queryString的工作量
queryString是查询字符串,http查询字符串由url中?后面的值指定
当页面上的form以GET方式向页面发送请求数据时 (如数据含有不安全字符,则浏览器先将其转换成16进制的字符再传送,如空格被转换成%20时 ) ,web server 将请求数据放入一名为QUERY_STRING的环境变量中。 Request.queryString 方法是从这一环境变量中取出相应的值,并将被转成16进制的字符还原
说了这么多,还是要先看看兼容性如何,这么一看,还好啊(温馨提示:下图只代表支持程度,支持归支持,不一定百分百支持,所以用到部分方法时不兼容时正常的)
先说说我上面说过的坑是怎么回事吧,我就按照实战代码写,然后以为能直接看到我塞进去的东西,然而...
var oMyForm = new FormData();
oMyForm.append("name", "Grady");
console.log(oMyForm) // 我以为会输出Grady的,但是返回的是FormData对象
好吧,这里打印出[object FormData]
这玩意,chrome里长这样子的
咦,怎么是个空的东西?我塞进去的数据呢?然后看到本身那堆方法,经过我大胆猜测跟虚心求教之后,FormData本身就这设置,想要看到属性只能去用方法拿到,所以...
var oMyForm = new FormData();
oMyForm.append("name", "Grady");
console.log(oMyForm.get('name'))
这里就涉及到兼容性问题了,如果不兼容的话会输出TypeError: oMyForm.get is not a function
,如果正常的话就输出'Grady'.
下面的代码也是,我一开始使用猎豹浏览器编辑的,后来只好转为chrome正常写下去
下面我们简单过一下比较常用的方法:
new FormData(form)
参数可选,一个HTML上的