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和ajax代替iframe的方法(详解)
Apr 12 jQuery
基于jQuery和CSS3实现APPLE TV海报视差效果
Jun 16 jQuery
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
Aug 23 jQuery
jQuery Datatables表头不对齐的解决办法
Nov 27 jQuery
jquery+css3实现熊猫tv导航代码分享
Feb 12 jQuery
jquery radio 动态控制选中失效问题的解决方法
Feb 28 jQuery
jQuery实现动态加载select下拉列表项功能示例
May 31 jQuery
Jquery和CSS实现选择框重置按钮功能
Nov 08 jQuery
IE8中jQuery.load()加载页面不显示的原因
Nov 15 jQuery
详解如何使用webpack打包多页jquery项目
Feb 01 jQuery
详解jQuery中的prop()使用方法
Jan 05 jQuery
jQuery 实现扁平式小清新导航
Jul 07 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入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
php数组中包含中文的排序方法
2014/06/03 PHP
PHP加密解密类实例分析
2015/04/20 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
JS基于递归实现倒计时效果的方法
2016/11/26 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
深入探究node之Transform
2017/07/20 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
黄金酒广告词
2014/03/21 职场文书
捐书活动总结
2014/05/04 职场文书
文明礼仪标语
2014/06/13 职场文书
实习科室评语
2015/01/04 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
2015年新农合工作总结
2015/03/30 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers