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 EasyUI 表单组件增加焦点切换功能的方法
Apr 13 jQuery
jQuery实现鼠标滑过预览图片大图效果的方法
Apr 26 jQuery
jQuery实现jQuery-form.js实现异步上传文件
Apr 28 jQuery
jQuery中的deferred对象和extend方法详解
May 08 jQuery
jQuery表单验证之密码确认
May 22 jQuery
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
Apr 27 jQuery
jquery实现联想词搜索框和搜索结果分页的示例
Oct 10 jQuery
Jquery获取radio选中值实例总结
Jan 17 jQuery
jquery实现的放大镜效果示例
Feb 24 jQuery
jQuery实现视频展示效果
May 30 jQuery
jQuery实现二级导航菜单的示例
Sep 30 jQuery
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
Jan 29 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
JS面向对象编程详解
2016/03/06 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
在vue-cli中组件通信的方法
2017/12/16 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
python多重继承实例
2014/10/11 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
django创建自定义模板处理器的实例详解
2017/08/14 Python
python psutil库安装教程
2018/03/19 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
Python 实现集合Set的示例
2020/12/21 Python
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
物业总经理助理岗位职责
2014/06/29 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
护士自荐信范文
2015/03/25 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
nginx七层负载均衡配置详解
2022/07/15 Servers