HTML5----FormData实例用法

2023-11-12

#ajax 异步上传文件

##1.前言

在网页与后台的交互中,用的最多的网络交互方式之一就是ajax,ajax 是免刷新页面就能从进行post与get方式的提交表单和获取服务端数据,但是在原先的ajax中,是不能携带文件上传的,但是由于h5里面的FormData的出现,让ajax可以直接在网页里面异步上传文件

##2.前期准备
下面代码是在jquery演示

###一、ajax的原理图

ajax原理图

  1、用户客户端发出HttpRequest     Ajax请求到服务端
  2、服务端做出响应,发出xml的数据交给ajax返回给用户
  3、用户客户端(浏览器)接受到数据后,通过一些处理展现在客户端看

下面我们来实现用AJAX传文件

###二、FormData详解
  XMLHttpRequest Level 2 添加了一个新的接口——FormData。利用 FormData 对象,我们可以通过 JavaScript 用一些键值对来模拟一系列表单控件,我们还可以使用 XMLHttpRequest 的 send() 方法来异步的提交表单。与普通的 Ajax 相比,使用 FormData 的最大优点就是我们可以异步上传二进制文件。
 FormData的出现,可以减少我们一些工作量 ,向在服务端传输值的时候类似于 jquery里面的serialize

###三、FormData代码演示

   在我们实际运用中,可以用以下几种方式来使用FormData
网页代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js" type="application/javascript"></script>
    //百度jquery cdn
</head>
<body>
<form id="myform" enctype="multipart/form-data">

    <input type="text" name="text1" id= "text1">
    <input type="text" name="text2" id= "text2">
    <input type="file" name="file">
    <input id="submit" type="button" name="提交">
</form>


</body>
</html>

1、实例化FormData方式

   var formdata = New FormData($('#myform')[0])   
   //这样所有表单里面的值均在formdata属性里面

2、append拼接方式

  var formdata = new FormData();
  formdata.append('text1',$('#text1').val());
  formdata.append('text2',$('#text2').val());
  formdata.append('file',$('file').files[0]);
  //这样才能得到一个formdata属性 这样很麻烦 所以我大部分都是用第一种 直接实例化出来一个formdata

还有第三种方法与第一种类似,我就不过多去讲解了。下面我用们用代码的方式来讲解formdata

##3、演示FormData 异步上传文件

html页面

 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js" type="application/javascript"></script>
</head>
<body>
<form id="myform" enctype="multipart/form-data">

    <input type="text" name="text1">

    <input type="text" name="text2">
    <input type="file" name="file">
    <br>
    <input id="submit" type="button" name="提交" value="提交">
</form>

<script>

    $('#submit').on('click',function () {
        var formdata =new FormData($('#myform')[0]);//构造FormData
       $.ajax({
           url:'server.php',
           data:formdata,
           type:'post',
           contentType:false, //使用正确的contentType类型 (必须) 2017.3.15号 我就是因为丢了这两个,调试了一天。。。。。。。。
           processData:false,//data选项既可以包含一个查询字符串,(必须)比如 key1=value1&amp;key2=value2 ,也可以是一个映射,比如 {key1: 'value1', key2: 'value2'} 。如果使用了后者的形式,则数据再发送器会被转换成查询字符串。这个处理过程也可以通过设置processData选项为false来回避
           success:function (msg) {


           }

       });


    });


</script>
</body>
</html>

php代码

//server.php

 var_dump($_FILES);
 var_dump($_POST);
//我们直接把这些值打印出来证明formdata已经上传图片到服务端

效果图FormData效果图

拿到了这个tep_name 临时文件地址,我们就可以做相应的文件上传处理 比如move_uploaded_file 移动到一个文件夹里面去,就是响应的文件上传了。。

##结尾
在没有FormData的时候,一般都是用其他其他方式来异步上传图片,但是FormData给我们开发带来了很大的便捷性,小伙伴应该已经学会了,下次你就可以用FormData异步构造data来上传文件或者表单了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML5----FormData实例用法 的相关文章

随机推荐

  • 【2】Midjourney注册

    随着AI技术的问世 2023年可以说是AI爆炸性成长的一年 近期最广为人知的AI服务除了chatgpt外 就是从去年五月就已经问世的AI绘画工具mid journey了 几个AI工具也代表了人工智能的热门阶段 只要输入一段文字 AI就会根据
  • 2021-07-19PHP面试笔试题记录

    1 执行以下代码 输出结果是 正确结果为 echo class b something 2 执行以下代码 输出结果是
  • vue2 cli4 打包chunk文件太多解决办法

    由于项目原因npm run build打包后chunk文件很多下 想减少chunk文件数量 在vue config js文件中添加webpack插件 文件头加var webpack require webpack 这样chunk文件数量就变
  • 华为交换机配置MSTP

    文章目录 1 拓扑图 2 任务描述 3 SW1配置 4 SW2配置 5 SW3配置 6 SW4配置 1 拓扑图 2 任务描述 在交换机SW1 SW2 SW3 SW4上配置MSTP防止二层环路 具体要求如下 VLAN10数据流默认经过SW3转
  • 程序媛菜鸡面经(八 - offer篇)

    投简历 简历是要多投的 但是有时候投多了简历也会有问题 头条 没有面试机会 在看过简历后HR发邮件告知我 从简历上能看出你是一位很优秀的人 但看不出你在前端 技术方面的竞争力 当时投的是旧版简历 于是我回邮问简历有误能否重申 至今未有回音
  • 子网掩码的作用

    IP地址由网络和主机两部分标识组成 IP地址由 网络标识 网络地址 和 主机标识 主机地址 两部分组成 在局域网内相互间通信的网络必须具有相同网络地址 也叫相同的网段 在同一个网段内每个设备的主机地址都不相同 在IPV4中 IP地址由32位
  • Vue中query与params两种传参的区别

    query语法 this router push path 地址 query id 123 这是传递参数 this route query id 这是接受参数 params语法 this router push name 地址 params
  • linux系统哪个好用

    linux系统哪个好用 1 Ubuntu服务器 Ubuntu是众所周知的最佳LinuxServerDistro 它能为您提供出色的用户体验 如果你是Linux世界的新手 选择Ubuntu作为你的服务器发行版将是最好的 使用此服务器 您可以做
  • Mac系统如何在圣诞节让电脑屏幕下雪?

    对于苹果 Mac 电脑上的 终端 应用 可能大家在平时用得不多 所以对它应该都会比较陌生 其实这个终端应用是用于让用户可以直接输入一些系统指令 让它执行相应的操作 比如简单的显示当前目录中的文件 显示日期与时间 删除文件等操作都是可以的 今
  • Android项目Gradle: Download gradle-6.5-bin.zip一直卡住解决方法

    1 首先停止gradle的下载 通过迅雷或浏览器将gradle下载下来 下载地址为 https services gradle org distributions gradle 6 5 bin zip 其他版本的gradle同理 2 打开C
  • 二级MS Office高级应用

    1 在长度为n的有序线性表中进行二分查找 最坏的情况下需要比较的次数是 O log2n 以2为底n对数 解析 当有序线性表为顺序存储时才可以用二分查找 可以证明的是对于长度为n的有序线性表 最坏的情况下 二分查找只需要比较O log2n 次
  • 数据仓库开发之路之一--准备工作

    在数据仓库的开发过程中 需要熟悉大量的概念以及相关工具的使用 还需要了解宏观上的各种开发流程 串联起来完成最终的数据仓库项目的开发 本篇介绍一些准备工作 包括涉及到的工具介绍 以及开发过程的描述 记录学习研究的印记 并和大家讨论研究存在的相
  • conda upgrade --all惹的祸,该怎么解决?

    本想要安装scikit surprise库 由于环境问题 就更新一下 谁知道差点酿成大祸 anaconda不灵了 无论什么语句都报错 jupyter notebook 不能用 navigator也打不开 万念俱灰了 导致我想要重装anaco
  • atx860和java_捷安特XTC800和ATX860有什么区别

    展开全部 区别比较大 简单说 ATX 8xx就是e69da5e887aa62616964757a686964616f31333431353237ATX 6xx的 局部升级 轮组由26寸换为27 5寸 车架外观改进 变速套件等级略微提高 仅此
  • mmclassification 训练自定义数据

    1 mmclassification 安装 如果环境已安装mmclassification 请跳过该步骤 mmclassification框架安装与调试验证请参考博客 mmclassification安装与调试 Coding的叶子的博客 C
  • STM32基于IIC协议的温湿度(AHT20)采集

    STM32基于IIC协议的温湿度 AHT20 采集 文章目录 STM32基于IIC协议的温湿度 AHT20 采集 1 IIC总线协议 1 1 什么是IIC协议 1 2 IIC协议的物理层和协议层 1 2 1 物理层 1 2 2 协议层 1
  • orm模型的查询方法集合

    目录 3 4 1 基本查询 3 4 2过滤查询 3 4 2 2 模糊查询 3 4 2 3 空查询 3 4 2 4 范围查询 3 4 2 5 比较查询 3 4 2 6 日期查询 3 4 3 1 F对象 3 4 3 2 Q对象 values 返
  • Aborted (core dumped) Assertion `Engine.getNbBindings() == 4' failed.

    记录一次特别粗心的错误 错误代码位置 assert的作用是现计算表达式 expression 如果其值为假 即为0 那么它先向stderr打印一条出错信息 然后通过调用 abort 来终止程序运行 需要 inputname 3 output
  • 垂直广告是什么意思_网上常看到带货这个词,那么带货到底是什么意思?又要怎么通过平台带货呢?...

    网上常看到带货这个词 那么带货到底是什么意思 又要怎么通过平台带货呢 直播带货就是通过短视频平台 吸引消费者来购买自己所售卖的产品 可以投放广告或是与达人合作进行带货 短视频 品牌营销优势 新一代广告宠儿 5G时代即将来临 人们越来越习惯且
  • HTML5----FormData实例用法

    ajax 异步上传文件 1 前言 在网页与后台的交互中 用的最多的网络交互方式之一就是ajax ajax 是免刷新页面就能从进行post与get方式的提交表单和获取服务端数据 但是在原先的ajax中 是不能携带文件上传的 但是由于h5里面的