当前位置: 首页 > news >正文

js中的Formdata数据结构

这里写目录标题

  • 一、基本概念
    • 二、常用方法
      • 1.append(name, value)、set(name, value)
      • 2.get()、getAll()
      • 3.has(name)
      • 4.delete(name)
      • 5.keys(),values(),entries()
    • 三、其他细节
      • 1.for of遍历
      • 2.转为对象
      • 3.结合 URLSearchParams 转为queryString

一、基本概念

FormData 提供了一种表示表单数据的 key/value 的构造方式,主要方便我们用 XMLHttpRequest 来发送数据。我们主要用它来作为上传文件的接口数据,因为结合 ‘multipart/form-data’ 请求类型,能实现与后端的流式传输。
构造函数:FormData(form?: HTMLFormElement, submitter?: (HTMLElement | null))

  • form:表单dom元素
  • submitter:提交按钮dom元素

实例化:const formdata = new FormData()

二、常用方法

1.append(name, value)、set(name, value)

append(name: string, value: string | Blob)
append(name: string, value: string | Blob)
append可以给FormData添加数据(支持字符串以及文件Blob类型数据),如果name存在则是追加一条数据。这里我们要与常规的对象数据结构区分开了,FormData的key不是唯一的,它可以存在多个相同的key。

const formData = new FormData()
formData.append('name', '张三')
formData.append('name', '李四')
formData.append('name', '王五')

注意:这里的值并不会相互覆盖,而是不断地追加到FormData中
set同样可以给formData添加数据,但是如果name存在,则会修改数据

const formData = new FormData()
formData.set('name', '张三')
formData.set('name', '李四') // 会覆盖前面的值formData.append('age', '11')
formData.set('age', '12') // 会覆盖前面的值

2.get()、getAll()

获取数据,区别就是get是获取name下的第一个值,而getAll则获取所有值

const formData = new FormData()
formData.append('age', '11')
formData.append('age', '33')
console.log(formData.get('age')); // 11
console.log(formData.getAll('age')); // ['11', '33']
formData.set('age', '12')
formData.set('age', '22')
console.log(formData.get('age')); // 22
console.log(formData.getAll('age')); // ['22']

3.has(name)

判断是否有FormData中是否包含name

const formData = new FormData()
formData.append('age', '33')
console.log(formData.has('age')); // true
console.log(formData.has('name')); // false

4.delete(name)

删除某个name属性,即使你append了多个相同的name属性,也会全部删除。

const formData = new FormData()
formData.append('age', '11')
formData.append('age', '33')
formData.delete('age') // []
console.log(formData.getAll('age'));
formData.set('name', '张三')
formData.delete('name')
console.log(formData.getAll('name')); // []

5.keys(),values(),entries()

获取FormData中的所有key、所有value和所有的[key,value]的iterator对象

  const formData = new FormData()formData.append('age', '11')formData.append('age', '33')formData.set('name', '张三')formData.set('name', '李四')const keys = formData.keys()console.log(keys);console.log([...keys]);const values = formData.values()console.log(values);console.log(...values);const entries = formData.entries()console.log(entries);console.log([...entries]);

在这里插入图片描述

我们可以看到,key是有多个的。

三、其他细节

1.for of遍历

FormData本身就是一个Iterator对象,所以我们可以直接使用for of遍历,同样也可以直接使用 …运算符展开。

  const formData = new FormData()formData.append('age', '11')formData.append('age', '33')formData.set('name', '张三')for (const item of formData) {console.log(item)}console.log([...formData]);const entries = formData.entries()console.log([...entries]);

在这里插入图片描述

事实上,FormData的iterator遍历返回的值就是formData.entries()

2.转为对象

FormData也可以快捷的转为常规对象数据,但是对象的key是唯一的,所以FormData重复的数据会丢失

  const formData = new FormData()formData.append('age', '11')formData.append('age', '33')formData.set('name', '张三')console.log(Object.fromEntries(formData.entries()));

在这里插入图片描述

3.结合 URLSearchParams 转为queryString

因为FormData本身就是为了方便前端与后端进行接口交互的,所以可以直接作为实例化 URLSearchParams的参数,然后转为queryString。
不过这种场景现实情况中用的不多,毕竟大家还是主要用FormData进行文件上传。

  const formData = new FormData()formData.append('age', '11')formData.append('age', '33')formData.set('name', '张三')console.log(new URLSearchParams(formData).toString())

相关文章:

js中的Formdata数据结构

这里写目录标题 一、基本概念二、常用方法1.append(name, value)、set(name, value)2.get()、getAll()3.has(name)4.delete(name)5.keys(),values(),entries() 三、其他细节1.for of遍历2.转为对象3.结合 URLSearchParams 转为queryString 一、基本概念 FormData 提供了一种表…...

Spring MVC 执行流程

前言 Spring MVC 是一个非常强大的框架,它能够帮助开发人员快速构建高效的 Web 应用程序。然而,要理解 Spring MVC 的执行流程并不容易,因为它涉及到多个组件和模块。在本文中,我们将介绍 Spring MVC 的执行流程,帮助…...

JAVA毕业设计104—基于Java+Springboot+Vue的医院预约挂号小程序(源码+数据库)

基于JavaSpringbootVue的医院预约挂号小程序(源码数据库)104 一、系统介绍 本系统前后端分离带小程序 小程序(用户端),后台管理系统(管理员,医生) 小程序: 预约挂号,就诊充值&…...

一文了解独立站黑科技:clock斗篷技术

FP产品作为高利润高回报的产品,它热度在出海商品中是一直居高不下的。但这类产品在独立站的运营中往往会遇到很多问题,例如最让商家头疼的投流问题,FP产品的推广营销很容易遭到平台的管控封禁,这时候往往会用到市面上现在很火的黑…...

Java IDEA controller导出CSV,excel

Java IDEA controller导出CSV,excel 导出excel/csv,亲测可共用一个方法,代码逻辑里判断设置不同的表头及contentType;导出excel导出csv 优化:有数据时才可以导出参考 导出excel/csv,亲测可共用一个方法&…...

FFmpeg编译安装(windows环境)以及在vs2022中调用

文章目录 下载源码环境准备下载msys换源下载依赖源码位置 开始编译编译x264编译ffmpeg 在VS2022写cpp调用ffmpeg 下载源码 直接在官网下载压缩包 这个应该是目前(2023/10/24)最新的一个版本。下载之后是这个样子: 我打算添加外部依赖x264&a…...

gRPC之gateway集成swagger

1、gateway集成swagger 1、为了简化实战过程,gRPC-Gateway暴露的服务并未使用https,而是http,但是swagger-ui提供的调用服 务却是https的,因此要在proto文件中指定swagger以http调用服务,指定的时候会用到文件 prot…...

Pytorch从零开始实战07

Pytorch从零开始实战——咖啡豆识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——咖啡豆识别环境准备数据集模型选择训练模型可视化模型预测其他问题总结 环境准备 本文基于Jupyter notebook,使用Python3.8,Pytor…...

大数据知识扫盲

MapReudece作业启动和运行机制 MapReduce是一种分布式计算框架,最初由Google开发,用于处理大规模数据集的批处理任务。其核心思想是将数据划分为小的块,然后并行处理这些块,最后将结果合并。以下是MapReduce作业的启动和运行机制…...

使用Ubuntu虚拟机离线部署RKE2高可用集群

环境说明 宿主机和虚拟机的OS与内核相同,如下 $ cat /etc/issue Ubuntu 22.04.3 LTS \n \l$ uname -sr Linux 6.2.0-34-generic虚拟化软件版本 $ kvm --version QEMU emulator version 6.2.0 (Debian 1:6.2dfsg-2ubuntu6.14) Copyright (c) 2003-2021 Fabrice Be…...

记一次任意文件下载到Getshell

任意文件下载(Arbitrary File Download)是一种常见的 Web 攻击技术,用于窃取服务器上任意文件的内容。攻击者利用应用程序中的漏洞,通过构造恶意请求,使应用程序将任意文件(如配置文件、敏感数据等&#xf…...

java异常处理

异常处理分为三类: 检查性异常 用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。 运行时异常 运行时异常是可能被程序员避免的异常&#xf…...

递归为什么这么难?一篇文章带你了解递归

递归为什么这么难?一篇文章带你了解递归 美国计算机科学家——彼得多伊奇(L Peter Deutsch)在《程序员修炼之道》(The Pragmatic Programmer)一书中提到“To Iterate is Human, to Recurse, Divine”——我理解的这句话为:人理解迭代,神理解…...

X86(32位)汇编指令与机器码转换原理

X86(32位)汇编指令与机器码转换原理 1 32位寻址形式下的ModR/M字节2 汇编指令转机器码2.1 mov ecx,[eaxebx*2]2.1.1 查Opcode和ModR/M2.1.2 查SIB 2.2 mov ecx,[eaxebx*210h]2.3 mov ecx,[eaxebx*200000100h] 本文属于《 X86指令基础系列教程》之一&…...

ES 全字段模糊检索时分词方式对检索结果的影响

文章目录 背景创建索引指定 _all 分词为空格创建索引插入索引数据全字段的模糊检索 创建索引指定 _all 分词为 keyword索引创建插入数据模糊检索 创建索引不配置 _all不同分词的结果启示录 背景 2018年参与使用 ES 和 Kafka 项目的开发,当时主要是做前端开发&#…...

基于Python Django 的微博舆论、微博情感分析可视化系统(V2.0)

文章目录 1 简介2 意义3 技术栈Django 4 效果图微博首页情感分析关键词分析热门评论舆情预测 5 推荐阅读 1 简介 基于Python的微博舆论分析,微博情感分析可视化系统,项目后端分爬虫模块、数据分析模块、数据存储模块、业务逻辑模块组成。 Python基于微博…...

python读取Excel到mysql

常见问题: 1.数据库密码有特殊字符 使用urllib.parse.quote_plus 编译密码 mysql_engine create_engine((f"mysqlpymysql://root:%s10.0.0.2:3306/mydb")%urllib.parse.quote_plus("passaaaa")) 2.设置字段类型 设置特定类型,和指…...

C++八股文面经

1.介绍一下你对面向对象的理解, 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作数据的方法组合成一个对象,以此来描述现实世界中的事物和概念。在面向对象编程中&#…...

【Linux】静态库和共享库一分钟快速上手

Linux 前言对比创建静态库动态库 前言 程序库,对于程序原来说是非常重要的。但不少人对其不太了解,接下来一起学习其中的奥秘吧! 简单来说,程序库可以分为静态库和共享库。它们包含了数据和执行代码的文件。其不能单独执行&#…...

C++继承总结(下)——菱形继承

一.什么是菱形继承 菱形继承是多继承的一种特殊情况&#xff0c;一个类有多个父类&#xff0c;这些父类又有相同的父类或者祖先类&#xff0c;那么该类就会有多份重复的成员&#xff0c;从而造成调用二义性和数据冗余。 class Person {public:Person(){cout << "P…...

终极CoreCycler教程:简单三步完成CPU稳定性测试与优化

终极CoreCycler教程&#xff1a;简单三步完成CPU稳定性测试与优化 【免费下载链接】corecycler Script to test single core stability, e.g. for PBO & Curve Optimizer on AMD Ryzen or overclocking/undervolting on Intel processors 项目地址: https://gitcode.com/…...

Source Han Serif CN:企业级开源字体终极实战指南

Source Han Serif CN&#xff1a;企业级开源字体终极实战指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 在当今数字化时代&#xff0c;企业面临字体选择的两难困境&#xff1a;商…...

NCM格式转换实战指南:ncmdumpGUI全面解析

NCM格式转换实战指南&#xff1a;ncmdumpGUI全面解析 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾为网易云音乐下载的NCM格式音乐无法在其他设备播…...

C语言结构体、枚举、联合体:从内存布局看区别,新手避坑指南

C语言结构体、枚举、联合体&#xff1a;从内存布局看区别&#xff0c;新手避坑指南 在C语言开发中&#xff0c;结构体、枚举和联合体是构建复杂数据模型的三大基石。但很多开发者在实际项目中常遇到这样的困惑&#xff1a;为什么结构体占用的内存比预期大&#xff1f;枚举变量在…...

Emacs AI编程助手:ai-code-interface.el深度集成指南

1. 项目概述&#xff1a;一个为Emacs注入AI灵魂的代码接口如果你是一位Emacs的深度用户&#xff0c;同时又对AI辅助编程抱有极大的热情&#xff0c;那么你很可能已经厌倦了在浏览器、终端和编辑器之间反复横跳的割裂体验。tninja/ai-code-interface.el这个项目&#xff0c;正是…...

openpilot自动驾驶系统深度解析:架构剖析与实战指南

openpilot自动驾驶系统深度解析&#xff1a;架构剖析与实战指南 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub_Trending/…...

基于Docker部署OpenOffice无头服务实现文档自动化处理

1. 项目概述与核心价值最近在折腾文档处理自动化流程&#xff0c;发现很多老项目或者特定场景下&#xff0c;对Office文档的兼容性要求极高&#xff0c;尤其是那些需要处理.doc、.xls、.ppt等老格式的场景。直接用现代办公套件&#xff08;比如LibreOffice&#xff09;去处理&a…...

从开源AI导师项目GURU-Ai拆解:如何构建具备教学能力的智能体

1. 项目概述&#xff1a;一个“AI导师”的诞生与定位最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Guru322/GURU-Ai”。光看名字&#xff0c;你可能会觉得这又是一个平平无奇的AI工具仓库。但点进去细看&#xff0c;你会发现它的野心不小——它想做的不是又一个聊天机…...

ARM Neoverse-V3架构解析与性能优化实战

1. ARM Neoverse-V3架构概览作为Arm公司面向基础设施领域的最新处理器IP&#xff0c;Neoverse-V3代表了当前服务器级处理器的顶尖设计水平。我在实际芯片开发中多次接触该架构&#xff0c;其设计哲学可概括为&#xff1a;通过精细化微架构控制实现性能与能效的完美平衡。1.1 指…...

轻量级配置中心zcf:中小团队微服务配置管理实战指南

1. 项目概述&#xff1a;一个轻量级、高可用的配置中心最近在梳理团队内部的技术栈&#xff0c;发现一个挺有意思的现象&#xff1a;很多中小型项目&#xff0c;甚至是一些快速迭代的业务线&#xff0c;在配置管理上依然处于一种“原始”状态。要么是各种application.yml、appl…...