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实现提示语淡入效果
May 05 jQuery
关于jQuery库冲突的完美解决办法
May 20 jQuery
jQuery实现简单的滑动导航代码(移动端)
May 22 jQuery
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
Aug 04 jQuery
详解jQuery-each()方法
Mar 13 jQuery
jQuery操作attr、prop、val()/text()/html()、class属性
May 23 jQuery
jquery操作select常见方法大全【7种情况】
May 28 jQuery
jquery.pager.js实现分页效果
Jul 29 jQuery
jquery分页优化操作实例分析
Aug 23 jQuery
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
May 29 jQuery
jQuery开发仿QQ版音乐播放器
Jul 10 jQuery
jquery实现淡入淡出轮播图效果
Dec 13 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
php去除头尾空格的2种方法
2015/03/16 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
Laravel 创建指定表 migrate的例子
2019/10/09 PHP
JavaScript中的事件处理
2008/01/16 Javascript
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
微信分享调用jssdk实例
2017/06/08 Javascript
深入理解React高阶组件
2017/09/28 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
基于javascript处理nginx请求过程详解
2020/07/07 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
python 判断自定义对象类型
2009/03/21 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
实习协议书范本
2014/04/22 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
话题作文之诚信
2019/11/28 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python