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插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
May 26 jQuery
jQuery实现可拖动进度条实例代码
Jun 21 jQuery
Mui使用jquery并且使用点击跳转新窗口的实例
Aug 19 jQuery
jquery 一键复制到剪切板的实例
Sep 20 jQuery
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
Nov 09 jQuery
jquery.picsign图片标注组件实例详解
Feb 02 jQuery
jquery 给动态生成的标签绑定事件的几种方法总结
Feb 24 jQuery
jQuery实现判断上传图片类型和大小的方法示例
Apr 11 jQuery
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
Feb 15 jQuery
使用jquery-easyui的布局layout写后台管理页面的代码详解
Jun 19 jQuery
JS JQuery获取data-*属性值方法解析
Sep 01 jQuery
jQuery是用来干什么的 jquery其实就是一个js框架
Feb 04 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 日期时间函数的高级应用技巧
2009/10/10 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
28个常用JavaScript方法集锦
2015/01/14 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
jquery根据一个值来选中select下的option实例代码
2016/08/29 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
vue+layui实现select动态加载后台数据的例子
2019/09/20 Javascript
Python做简单的字符串匹配详解
2017/03/21 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
如何通过python实现全排列
2020/02/11 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
浅析Python面向对象编程
2020/07/10 Python
教你如何用python操作摄像头以及对视频流的处理
2020/10/12 Python
python实现马丁策略的实例详解
2021/01/15 Python
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
主管会计岗位职责
2014/03/13 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
创建文明城市倡议书
2015/04/28 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
《将心比心》教学反思
2016/02/23 职场文书
深入讲解数据库中Decimal类型的使用以及实现方法
2022/02/15 MySQL
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers