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插件
Mar 29 jQuery
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
jQuery Tree Multiselect使用详解
May 02 jQuery
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
jQuery实现的简单前端搜索功能示例
Oct 28 jQuery
springmvc接收jquery提交的数组数据代码分享
Oct 28 jQuery
jQuery与vue实现拖动验证码功能
Jan 30 jQuery
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
jquery传参及获取方式(两种方式)
Feb 13 jQuery
JQuery省市联动效果实现过程详解
May 08 jQuery
jQuery实现视频展示效果
May 30 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
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
php生成mysql的数据字典
2016/07/07 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
2016/10/28 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
layui实现三级联动效果
2019/07/26 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
浅谈python之新式类
2018/08/12 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
Python基于Faker假数据构造库
2020/11/30 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
如何写一封打动人心的求职信
2014/02/17 职场文书
端午节演讲稿
2014/05/23 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书