位置: 编程技术 - 正文

通过Ajax使用FormData对象无刷新上传文件方法(ajax multipart/form-data)

编辑:rootadmin

推荐整理分享通过Ajax使用FormData对象无刷新上传文件方法(ajax multipart/form-data),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:ajax使用实例,ajax 提交form,ajax使用代码示例,ajax 使用,ajax使用代码示例,ajax使用代码示例,ajax 使用,ajax formdata,内容如对您有帮助,希望把文章链接给更多的朋友!

写在前面:本文说的这个方案有浏览器兼容性问题;所有主流浏览器的较新版本已经支持这个对象了,比如Chrome 7+、Firefox 4+、IE +、Opera +、Safari 5+,对兼容性比较敏感的网站慎用。

在工作中遇到了一个问题:在一个页面中,有4块内容,每块内容都包含一个图片上传功能,希望可以实现一键把这四块内容都上传上去。

我没有用插件实现上传功能,就是用的input[type=file],因此就遇到一个问题就是:

①传统的form表单会导致页面刷新,无法实现上述功能

②把表单serialize()序列化用Ajax的方式提交,也无法把上传文件的文件流进行序列化,也不行

我现有的知识就搞不定了,只能求助网上的大神了,百度了一下,大概看了两个方案:

①在js中创建一个新form表单,把页面中原form表单copy一份,然后再用js搞一个iframe,把form表单的target设置为iframe,这样提交后返回的内容就在iframe里,最后再把form表单、iframe移除

②就是本文下面要说的使用FormData对象实现

有其他思路方案的希望不吝赐教!

好,介绍完背景之后,开始介绍我们今天的主题:FormData对象。

有两种方式可以创建一个FormData对象:

①创建一个空的FormData对象,然后使用append()方法向该对象里添加字段

②使用HTML表单来初始化一个FormData对象

下面分别介绍一下:

第一种方式:

第二种方式:

注意:

Ajax的processData设置为false。因为data值是FormData对象,不需要对数据做处理。 第二种方式中<form>标签加enctyp  e="multipart/form-data"属性。 cache设置为false,上传文件不需要缓存。 contentType设置为false。因为是由<form>表单构造的FormData对象,且已经声明了属性enctype="mutipart/form-data",所以这里设置为false。通过Ajax使用FormData对象无刷新上传文件方法(ajax multipart/form-data)

前端搞定之后,剩下的就是后端处理了。ok,就到这里了。

FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单"。

在 Mozilla Developer 网站 使用FormData对象 有详尽的FormData对象使用说明。

但上传文件部分只有底层的XMLHttpRequest对象发送上传请求,那么怎么通过jQuery的Ajax上传呢?

本文将介绍通过jQuery使用FormData对象上传文件。

使用<form>表单初始化FormData对象方式上传文件

HTML代码

JavaScript代码

这里要注意几点:

processData设置为false。因为data值是FormData对象,不需要对数据做处理。 <form>标签添加enctype="multipart/form-data"属性。 cache设置为false,上传文件不需要缓存。 contentType设置为false。因为是由<form>表单构造的FormData对象,且已经声明了属性enctype="multipart/form-data",所以这里设置为false。

上传后,服务器端代码需要使用从查询参数名为file获取文件输入流对象,因为<input>中声明的是name="file"。

如果不是用<form>表单构造FormData对象又该怎么做呢?

使用FormData对象添加字段方式上传文件

HTML代码

这里没有<form>标签,也没有enctype="multipart/form-data"属性。

javascript代码

这里有几处不一样:

append()的第二个参数应是文件对象,即$('#file')[0].files[0]。 contentType也要设置为‘false'。

从代码$('#file')[0].files[0]中可以看到一个<input type="file">标签能够上传多个文件,只需要在<input type="file">里添加multiple或multiple="multiple"属性。

服务器端读文件

从Servlet 3.0 开始,可以通过 request.getPart() 或 request.getPars() 两个接口获取上传的文件。

这里不多说,详细请参考官网教程 Uploading Files with Java Servlet Technology 以及示例The fileupload Example Application

标签: ajax multipart/form-data

本文链接地址:https://www.jiuchutong.com/biancheng/376249.html 转载请保留说明!

上一篇:jQuery实现鼠标滑过图片移动特效(jquery设置鼠标样式)

下一篇:PHP+jquery+ajax实现分页

  • 发票丢失第一联盖章能用么
  • 家里财产分割
  • 差旅费包括哪些费用
  • 加油发票样式图
  • 多余的实收资本可以转到其他应付款吗
  • 金税平台开具增值税发票
  • 销售的增值税怎么算
  • 招标代理资质办理好办吗
  • 资产划转涉税解读
  • 以前借款没做账现在收回来怎么做账务处理?
  • 简易计税项目可以差额征税吗
  • 2017年的7月1日
  • 外管证税收预缴税率是多少?
  • 工会有纳税号吗
  • 用友软件报表公式
  • 发票认证的三种方式
  • 收到退还的工会经费进什么科目
  • 电脑休眠和睡眠什么差别
  • printnow.exe - printnow是什么进程 有什么作用
  • 金蝶kis期初余额设置
  • xbox无法连接无线网络
  • php使用redis缓存技术
  • 系统托盘开不开
  • 报关代理费是什么
  • PHP:stream_filter_remove()的用法_Stream函数
  • 应付职工薪酬的明细科目有哪些
  • 一般股份支付的确认计量及帐务处理怎么做
  • php加密文件解密
  • php socket编程
  • 电力行业增值税率
  • uniapp image mode
  • PHP使用pear实现mail发送功能 windows环境下配置pear
  • php分层架构
  • css 自定义变量
  • 帝国cms移动端
  • vue中动态添加表格
  • 豪华车消费税的计算公式
  • 企业会计准则规定了
  • 金蝶系统采购发票
  • 结转财务费用时怎么做账
  • 被投资企业清算,长期股权投资处理
  • 公司捐赠给个人公司要交税吗
  • 无锡政府回购安置房
  • sql随机抽取
  • sql死锁的简单例子
  • 代开发票是不是都要扣增值税呢?
  • 企业每月利润多少合适
  • 预付账款摊销会计分录
  • 代缴社保会计分录
  • 以前年度不合规发票如何调年报
  • 小规模纳税人变更一般纳税人条件
  • 企业注销其他应付款怎么处理账务
  • 去年的进项发票今年怎么入账
  • 银行账与实际账不符
  • 长期应付款涉及哪些业务,应如何进行核算
  • 工业企业增值税纳税义务发生时间
  • mysql数据库去重
  • sqlserver数据库怎么导出
  • windows的实验步骤
  • pages怎么标记
  • centos php apache
  • fedora安装xorg
  • ubuntu operation not permitted
  • 关闭windbg
  • windows 8开机
  • jquery()
  • opengl和openglskia
  • cocos2dx运行原理
  • js有while吗
  • Linux base shell重定向详解
  • python利用数据文件统计成绩
  • js 模态对话框和对话框
  • windows的安装类型
  • mailto的使用技巧分享
  • android:ellipsize="marquee"
  • javascript基础编程
  • android插件化原理面试
  • javascript核心技术开发解密
  • 河南省教育厅纪检组举报电话
  • 纳税申报表保管期限为几年
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设