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实现 RadioButton做必选校验功能
Jun 15 jQuery
简单实现jQuery手风琴效果
Aug 18 jQuery
springmvc接收jquery提交的数组数据代码分享
Oct 28 jQuery
js和jQuery以及easyui实现对下拉框的指定赋值方法
Jan 23 jQuery
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
Apr 17 jQuery
jQuery基于Ajax实现读取XML数据功能示例
May 31 jQuery
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
Feb 14 jQuery
jquery多级树形下拉菜单的实例代码
Jul 09 jQuery
jquery实现直播视频弹幕效果
Feb 25 jQuery
jQuery实现异步上传一个或多个文件
Aug 17 jQuery
jquery简易手风琴插件的封装
Oct 13 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 如何向 MySQL 发送数据
2006/10/09 PHP
PHP缓存机制Output Control详解
2014/07/14 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
jQuery 使用个人心得
2009/02/26 Javascript
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
Jquery ajaxsubmit上传图片实现代码
2010/11/04 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
python操作redis数据库的三种方法
2020/09/10 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
运动会班级口号
2014/06/09 职场文书
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
教师年度考核个人总结
2015/02/12 职场文书
实验室安全管理制度
2015/08/05 职场文书