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查找和过滤_动力节点节点Java学院整理
Jul 04 jQuery
JQuery 获取Dom元素的实例讲解
Jul 08 jQuery
jquery插件canvaspercent.js实现百分比圆饼效果
Jul 18 jQuery
jquery+ajaxform+springboot控件实现数据更新功能
Jan 22 jQuery
vue.js2.0点击获取自己的属性和jquery方法
Feb 23 jQuery
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
jQuery 实现批量提交表格多行数据的方法
Aug 09 jQuery
jQuery中each遍历的三种方法实例分析
Sep 07 jQuery
jquery实现的分页显示功能示例
Aug 23 jQuery
jquery 键盘事件 keypress() keydown() keyup()用法总结
Oct 23 jQuery
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
jQuery 判断元素是否存在然后按需加载内容的实现代码
Jan 16 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中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
javascript的函数
2007/01/31 Javascript
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
js substr、substring和slice使用说明小记
2011/09/15 Javascript
js常用代码段整理
2011/11/30 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
javascript等号运算符使用详解
2015/04/16 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
python实现三种随机请求头方式
2021/01/05 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
新闻记者个人求职的自我评价
2013/11/28 职场文书
中英文求职信范文
2014/01/27 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
企业法人授权委托书
2014/09/25 职场文书
小学班主任事迹材料
2014/12/17 职场文书
硕士学位论文评语
2014/12/31 职场文书
公司人事任命通知
2015/04/20 职场文书
2015年信息中心工作总结
2015/05/25 职场文书
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技