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插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
Mar 24 jQuery
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
Apr 10 jQuery
为JQuery EasyUI 表单组件增加焦点切换功能的方法
Apr 13 jQuery
深入理解jquery的$.extend()、$.fn和$.fn.extend()
Jul 08 jQuery
jQueryUI Sortable 应用Demo(分享)
Sep 07 jQuery
jQuery插件artDialog.js使用与关闭方法示例
Oct 09 jQuery
jQuery基于cookie实现换肤功能实例
Oct 14 jQuery
CSS3结合jQuery实现动画效果及回调函数的实例
Dec 27 jQuery
jquery+css3实现熊猫tv导航代码分享
Feb 12 jQuery
JQuery选中select组件被选中的值方法
Mar 08 jQuery
jQuery实现适用于移动端的跑马灯抽奖特效示例
Jan 18 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实现随机生成易于记忆的密码
2015/06/19 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
Python语言描述机器学习之Logistic回归算法
2017/12/21 Python
Python 学习教程之networkx
2019/04/15 Python
基于python中__add__函数的用法
2019/11/25 Python
python实现图像全景拼接
2020/03/27 Python
python为什么要安装到c盘
2020/07/20 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
python在协程中增加任务实例操作
2021/02/28 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
尼克松手表官网:Nixon手表
2019/03/17 全球购物
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
Java语言程序设计测试题选择题部分
2014/04/03 面试题
数控机械专业个人的自我评价
2014/01/02 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
社区义诊活动总结
2014/04/30 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
学风建设主题班会
2015/08/17 职场文书
2016年七夕情人节宣传语
2015/11/25 职场文书
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技