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卸载全部事件的思路详解
Apr 03 jQuery
JQuery 封装 Ajax 常用方法(推荐)
May 21 jQuery
解决jQuery ajax动态新增节点无法触发点击事件的问题
May 24 jQuery
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
jQuery Form插件使用详解_动力节点Java学院整理
Jul 17 jQuery
利用jQuery异步上传文件的插件用法详解
Jul 19 jQuery
jquery对table做排序操作的实例演示
Aug 10 jQuery
jQuery EasyUI结合zTree树形结构制作web页面
Sep 01 jQuery
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
Jan 18 jQuery
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
Jan 18 jQuery
jquery添加div实现消息聊天框
Feb 08 jQuery
jQuery HTML css()方法与css类实例详解
May 20 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保存二进制原始数据为图片的程序代码
2014/10/14 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
vue-router相关基础知识及工作原理
2018/03/16 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
python类的继承实例详解
2017/03/30 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
Python中格式化字符串的四种实现
2020/05/26 Python
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
美国在线家具网站:GDFStudio
2021/03/13 全球购物
new修饰符是起什么作用
2015/06/28 面试题
销售实习自我鉴定
2013/12/07 职场文书
护理中职生求职信范文
2014/02/24 职场文书
房产公证书
2015/01/23 职场文书
优秀员工自荐书
2015/03/06 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python