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实现的手风琴侧边菜单效果
Mar 29 jQuery
jQuery tip提示插件(实例分享)
Apr 28 jQuery
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
jQuery实现IE输入框完成placeholder标签功能的方法
Sep 20 jQuery
jQuery EasyUI 选项卡面板tabs的使用实例讲解
Dec 25 jQuery
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
jQuery中实现text()的方法
Apr 04 jQuery
基于jquery ajax的多文件上传进度条过程解析
Sep 11 jQuery
jQuery高级编程之js对象、json与ajax用法实例分析
Nov 01 jQuery
jQuery实现可编辑的表格
Dec 11 jQuery
jquery实现拖拽添加元素功能
Dec 01 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
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
2013/12/29 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
JS控制TreeView的结点选择
2016/11/11 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
python实现巡检系统(solaris)示例
2014/04/02 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
详解python播放音频的三种方法
2019/09/23 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
法国最大电子商务平台:Cdiscount
2018/03/13 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
周鸿祎:教你写创业计划书
2013/12/30 职场文书
节约用水标语
2014/06/11 职场文书
公司合作意向书范文
2014/07/30 职场文书
财政局个人年终总结
2015/03/03 职场文书
刑事起诉书范文
2015/05/19 职场文书
校运会广播稿
2015/08/19 职场文书
创业计划之特色精品店
2019/08/12 职场文书
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js