当我们用ajax提交表单时,通常用的都是serialize对表单进行序列化。

但是有了文件标签type='file'时,用serialize进行序列化,就会有问题了

解决表单有文件时序列化的方法,就是用FormData

下面来说下FormData怎么用:

FormData用法

  1. 实例化了一个空的FormData对象,可以认为它就是一个form表单,但现在里面什么控件都没有。

    var formData = new FormData();
    
    1. 可直接放表单对象序列化,自动封装对象对象为DOM对象
    var formData = new FormData($("#subForm")[0]);
    
    1. 给实例化的formdata对象添加一个控件,注意这里添加的是表单已写有input标签的
    <input type="file" name="myfile">
    
    formData.append('myfile', $('input[name=myfile]')[0].files[0]);
    
    1. 没用表单时,以“键-值”对的形式给FormData添加控件,注意第3个参数“上传文件名”是可选的
    FormData.append(name, value, filename);
    
    1. 将实例化的formData作为jQuery.ajax()方法data参数的值传递进去,提交给后端服务器

    注意的是以下三个参数不可少

    cache: false,
    processData: false,
    contentType: false,
    

    cache设置为false,上传文件不需要缓存。

    processData参数,根据jQuery.ajax()文档中的解释,默认情况下,jQuery会处理发送的数据,将数据按照’application/x-www-form-urlencoded’的要求转换为查询字符串,如果要发送的数据是DOMDocument或者不需要处理,就可以设置为false不让jQuery转换数据,我们这里要发送的数据其实就是DOMDocument。

    contentType设置为false。因为是由form表单构造的FormData对象,且已经声明了属性***enctype=“mutipart/form-data”***,所以这里设置为false。


FormData代码例子

一、有表单

ajax用var formData = new FormData($("#subForm")[0]);

<form id= "Form" enctype="multipart/form-data">......
</form>
function ajaxSubmit(){var url = "提交路径";//有文件上传,所以使用FormData装载表单//serialize()不序列化上传的文件var formData = new FormData($("#Form")[0]);$.ajax({url : url,type: 'POST',data: formData,cache: false,processData: false,contentType: false,success: function (data) {alert(data);}

二、没有表单
var oMyForm = new FormData();oMyForm.append("userName", "Groucho");oMyForm.append("accountnum", 123456); oMyForm.append("file", $('#file')[0].files[0]);  $.ajax({url: '提交路径',type: 'POST',data: oMyForm,cache: false,processData: false,contentType: false,success:function(data){alert(data);
}

FormData表单序列化相关推荐

  1. jQuery中的ajax、jquery中ajax全局事件、load实现页面无刷新局部加载、ajax跨域请求jsonp、利用formData对象向服务端异步发送二进制数据,表单序列化(异步获取表单内容)

    jQuery中使用ajax: 在jQuery中使用ajax首先需要引入jQuery包,其引入方式可以采用网络资源,也可以下载包到项目文件中,这里推荐下载包到文件中:市面上有多个版本的jQuery库,这 ...

  2. antd如何获取表单的值_JavaScript多个表单序列化获取值

    JavaScript多个表单序列化获取值 获取数据格式如下: [{inid: "1231", age: "231231", sex: "123&quo ...

  3. ajax异步请求——form表单提交 及 表单序列化提交

    ajax异步请求 AJAX介绍 AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML),它不是一种新的编程语言,而是一种使用现有标准的新方 ...

  4. JQuery表单序列化方式

    使用场景:ajax提交表单数据 <!DOCTYPE html> <html><head><meta charset="UTF-8"> ...

  5. 表单序列化以及后台表单数据参数的提取

    (该资料是楼主复习时所用,很浅显,如果有哪些地方不正确,欢迎大家留言指出) 提交表单的时候,一个表单可能会有多个参数,为了将这些参数传到后台,有两种方法: (1)通过表单id一个一个地将表单输入栏的v ...

  6. JS的表单序列化,数组去重,判断数组是否重复等方法

    一.背景 本篇主要是记录一下JS中常用的工具方法.包括表单序列化,判断数组是否重复,数组去重等.做个笔记 二.工具方法 1.表单元素序列化为对象 public function serializeOb ...

  7. antd提交表单_表单序列化

    随着 Ajax 的出现,表单序列化已经成为一种常见需求.在 JavaScript 中,可 以利用表单字段的 type 属性,连同 name 和 value 属性一起实现对表单的序列化.在编写代码之前, ...

  8. JQ表单序列化变成 对象

    JQ表单序列化变成 对象 function serializeObject(form) { var o = {}; $.each(form.serializeArray(), function(ind ...

  9. js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么

    js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么 一.总结 一句话总结:两者都是对表单进行序列化,serializeArray()返回的是json ...

最新文章

  1. 莱比特矿池CEO江卓尔:BCH作为货币不需要新功能,但出于货币竞争的考虑需要
  2. Ubuntu 12.04安装NFS server
  3. python取列表中最接近某值的元素及索引
  4. js路由在php上面使用,React中路由使用详解
  5. 转 -- 推荐几本云计算的经典书籍
  6. 跨站脚本(XSS)漏洞 (一)
  7. 用python画哆啦a梦的代码解释_python画哆啦A梦和大雄
  8. python接口自动化测试(二)-requests.get()
  9. REVERSE-PRACTICE-BUUCTF-26
  10. C++工作笔记-map中结构体的比较
  11. 丰巢快递将强制收费引网友吐槽,全国第一驿站表示继续免费
  12. 高清方法生成缩略图函数
  13. 【报告分享】抖音蓝V账号定位及外化罗盘.pdf(附下载链接)
  14. git clone 之前,是否需要先 git init
  15. 有人滥用 GitHub Actions在 GitHub 服务器挖掘密币,且正在蔓延
  16. 用ajax获取淘宝关键字接口
  17. 【PAT】1009. 说反话 (20)
  18. 2.原子变量 CAS算法
  19. matlab内维尔差值,基于IGS精密星历的卫星位置内插方法比较
  20. 如何使用krpano全景资源下载器来下载720yun的全景图

热门文章

  1. 计算机专业入学技能测试,2017年单独招生职业技能测试和综合素质测试说明.PDF...
  2. Controller(一)
  3. 元宇宙直播:“概念期”的暴利生意,风口下的炒作游戏
  4. 应届生校招经验汇总(主银行)
  5. 两表连接查询 mysql_MySQL 中两表连接查询总结
  6. css画空心圆 空心圆中放图片,CSS空心圆
  7. java-php-python-ssm搬家预约系统计算机毕业设计
  8. oracle SCN健康检查脚本
  9. 盘点JAVA中五个重定向的方式
  10. android通知栏(常驻),通知与跳转NotificationHelper,通知栏静音通知栏关闭声音,点击后取消通知栏,通知栏的级别Priority、优先级setPriority,