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中hover方法搭配css的hover选择器,实现选中元素突出显示方法
May 08 jQuery
jquery实现图片轮播器
May 23 jQuery
jQuery实现的鼠标滚轮控制图片缩放功能实例
Oct 14 jQuery
原生JS与jQuery编写简单选项卡
Oct 30 jQuery
jQuery读取本地的json文件(实例讲解)
Oct 31 jQuery
简单实现jquery隔行变色
Nov 09 jQuery
jquery在启动页面时,自动加载数据的实例
Jan 22 jQuery
jQuery仿移动端支付宝键盘的实现代码
Aug 15 jQuery
jQuery设置下拉框显示与隐藏效果的方法分析
Sep 15 jQuery
JavaScript或jQuery 获取option value值方法解析
May 12 jQuery
Jquery $.map使用方法实例详解
Sep 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
深入Nginx + PHP 缓存详解
2013/07/11 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
js实现简单登录功能的实例代码
2013/11/09 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
Jquery Ajax xmlhttp请求成功问题
2015/02/04 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
node中的session的具体使用
2018/09/14 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
Python3基础之条件与循环控制实例解析
2014/08/13 Python
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
美国踏板车和轻便摩托车销售网站:Mega Motor Madness
2020/02/26 全球购物
销售工作人员的自我评价分享
2013/11/10 职场文书
销售助理岗位职责
2014/02/21 职场文书
目标管理责任书
2014/04/15 职场文书
政协委员个人总结
2015/03/03 职场文书
美容院员工规章制度
2015/08/05 职场文书