jquery使用FormData实现异步上传文件


Posted in jQuery onOctober 25, 2018

考虑一个常见的用户上传头像的场景:

  • 点击按钮,弹出文件选择框
  • 选中图片并确认后直接上传图片

实现这个功能,需要使用<input>来添加文件,并实现上传功能。传统的上传文件是将<input>放到<form>中提交,但在这个场景中并不存在form表单,只有一个input而已。那么应该如何处理呢?

答案是可以使用FormData来实现文件的提交。

先看一下MDN对FormData的介绍:

XMLHttpRequest Level 2添加了一个新的接口FormData.利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个”表单”.比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件.

这样一来,解决问题的思路就出来了:

  • 每次选中文件并确认后,<input>会触发change事件,在onchange事件处理函数中处理即可。
  • 创建一个FormData对象,并将选中的文件追加进去。
  • 使用Ajax发送这个FormData对象。

下面用一个Demo展示具体的代码实现用FormData将文件发送到一个php:

<html>
<head>
  <title>Upload</title>
  <meta charset="utf-8">
</head>
<body>
  <input id="file-input" type="file">

  <script>
    var input = document.getElementById('file-input');
    input.onchange = function () {
      var data = new FormData();
      data.append('file', input.files[0]);

      var request = new XMLHttpRequest();
      request.open('POST', './upload.php');
      request.send(data);
    };
  </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
Mar 24 jQuery
jQuery实现的背景颜色渐变动画效果示例
Mar 24 jQuery
jQuery实现滚动到底部时自动加载更多的方法示例
Feb 18 jQuery
jquery点击回车键实现登录效果并默认焦点的方法
Mar 09 jQuery
jQuery实现的两种简单弹窗效果示例
Apr 18 jQuery
基于 jQuery 实现键盘事件监听控件
Apr 04 jQuery
jQuery中使用validate插件校验表单功能
May 24 jQuery
jQuery实现判断滚动条滚动到document底部的方法分析
Aug 27 jQuery
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 jQuery
jQuery 选择器用法基础入门示例
Jan 04 jQuery
jQuery表单校验插件validator使用方法详解
Feb 18 jQuery
jQuery实现简单QQ聊天框
Aug 27 jQuery
jQuery+Datatables实现表格批量删除功能【推荐】
Oct 24 #jQuery
jQuery pagination分页示例详解
Oct 23 #jQuery
jquery.pagination.js分页使用教程
Oct 23 #jQuery
jquery分页插件pagination使用教程
Oct 23 #jQuery
使用jquery Ajax实现上传附件功能
Oct 23 #jQuery
jquery实现动态添加附件功能
Oct 23 #jQuery
jQuery.validate.js表单验证插件的使用代码详解
Oct 22 #jQuery
You might like
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
js实现微信聊天效果
2020/08/09 Javascript
Python实现比较两个列表(list)范围
2015/06/12 Python
Python实现约瑟夫环问题的方法
2016/05/03 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
django ajax json的实例代码
2018/05/29 Python
python实现俄罗斯方块游戏
2020/03/25 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
python collections模块的使用
2020/10/16 Python
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
Baracuta官方网站:Harrington夹克,G9,G4,G10等
2018/03/06 全球购物
八荣八耻演讲稿
2014/09/15 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
大学生毕业评语
2014/12/31 职场文书
2015年调度员工作总结
2015/04/30 职场文书
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android