Formdata表單數據提交

前言:在表單數據提交中,常常除了字符串拼接的方式傳給后端,一般可能還需要使用Fromdata的格式包裝所要提交的表單數據傳遞。

常用場景:表單數據提交

一、Formdata的優勢

使用 FormData 主要是因為它有兩個獨特優勢:

  1. 能輕松處理文件上傳
    普通的 JSON 格式無法直接包含文件內容,而 FormData 可以天然支持文件上傳,這是它最常用的場景。

  2. 模擬傳統表單提交
    當你需要像傳統 HTML 表單(enctype="multipart/form-data")那樣提交數據時,FormData 會自動處理數據格式,讓服務器能像解析普通表單一樣解析它。

二、FormData 的數據結構

可以理解成一個鍵值對的集合,但比普通對象更靈活:

  • 一個鍵可以對應多個值(比如多選框的多個選項)
  • 可以包含文件對象(這是它的核心優勢)

舉個例子,假設你有這樣的表單數據:

// 普通對象形式
const formMess = {username: '張三',hobbies: ['籃球', '游戲'], // 一個鍵對應多個值avatar: File對象 // 圖片文件
}

轉成 FormData 后,內部結構類似:

鍵: "username" → 值: "張三"
鍵: "hobbies" → 值: "籃球"
鍵: "hobbies" → 值: "游戲"
鍵: "avatar" → 值: (二進制文件數據)

三、獲取FromData里面的值

你可以通過formData.get('username')獲取單個值,或formData.getAll('hobbies')獲取多個值。

簡單說,FormData 就是為表單數據(尤其是帶文件的)量身定做的 "包裝器",讓數據傳遞更符合表單提交的規范。

四、使用FromData的場景

簡單說,當你需要提交包含文件的數據,或者要模擬傳統 HTML 表單的提交方式時,就需要用到 FormData。

具體場景包括:

  1. 上傳文件時必須用
    比如上傳頭像、圖片、文檔等,因為普通的 JSON 格式無法處理二進制文件數據,而 FormData 能天然支持文件對象的傳遞。

  2. 需要提交復雜表單數據時
    比如包含多選框(一個字段對應多個值)、下拉選擇器等,FormData 可以很方便地處理 "一個鍵對應多個值" 的情況。

  3. 需要模擬傳統表單提交行為時
    當后端接口要求數據格式必須是multipart/form-data(傳統表單的默認編碼方式)時,用 FormData 能讓瀏覽器自動處理數據格式,避免手動拼接格式導致的錯誤。

  4. 跨域表單提交且需要攜帶 Cookie 時
    結合 axios 的withCredentials: true,FormData 可以更規范地處理跨域場景下的表單數據提交。

反過來,如果只是提交簡單的文本數據(如用戶名、密碼),用普通 JSON 格式(application/json)會更簡潔,沒必要用 FormData。

五、FormData可支持的數據類型

FormData 雖然最常用于文件上傳,但實際上它能發送各種表單常見的數據類型,只要是鍵值對形式的數據都能處理,包括:

  1. 普通文本數據
    比如輸入框里的字符串(用戶名、郵箱)、數字(年齡、手機號)等,像?username: "張三"age: 25?這類鍵值對都能直接添加。

  2. 多選數據
    比如表單里的多選框(checkbox),一個鍵可以對應多個值。例如?hobby: "籃球"?和?hobby: "游戲"?可以同時存在,后端能接收到一個包含多個值的數組。

  3. 布爾值 / 開關狀態
    比如單選按鈕(radio)或開關組件的狀態,像?agree: true(同意協議)這種布爾值也能正常傳遞。

  4. 日期 / 時間
    表單里的日期選擇器數據,比如?birthday: "2000-01-01"?這種字符串格式的日期,同樣可以通過 FormData 發送。

  5. 二進制數據(非文件)
    除了文件,其他二進制數據(比如手動生成的二進制流)也能通過?formData.append(key, 二進制對象)?方式添加。

簡單說,只要是表單里能填的、選的、勾的內容,不管是文本、數字、選項還是開關狀態,FormData 都能統一打包發送,用法和普通對象類似,只是格式更符合表單提交的規范。

六、舉個例子

<template><div class="from_box"><form action=""><input type="text"  placeholder="請輸入昵稱" v-model="formMess.account"><input type="password" placeholder="請輸入密碼" v-model="formMess.act_pwd"><input type="text" placeholder="請輸入手機號" v-model="formMess.phone"></form><span class="button" @click="onSubmit()">提交</span></div>
</template><script>
import axios from 'axios';export default {name: "from",data() {return {formMess:{"account":"","act_pwd":"","phone":""}};},methods: {onSubmit() {/* json格式提交: */// let formData = JSON.stringify(this.formMess);/* formData格式提交: */let formData = new FormData();for(var key in this.formMess){formData.append(key,this.formMess[key]);}axios({method:"post",url:"xxxxxxx",headers: {"Content-Type": "multipart/form-data"},withCredentials:true,data:formData}).then((res)=>{console.log(res);});}}
};
</script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97200.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97200.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97200.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React Native 初體驗

前言 最近公司需要移植一個應用到 iOS 端&#xff0c;本來想要嘗試 uniapp 的新架構 uniapp-x 的&#xff0c;折騰兩天放棄了&#xff0c;選擇了 React Native。 原因&#xff1a; HbuilderX 中的 uniapp-x 模版過于臃腫&#xff0c;夾雜很多不需要的東西&#xff08;可能是…

自動駕駛中的傳感器技術36——Lidar(11)

本章節重點介紹和FMCWOPA Lidar強相關的硅光技術。 1、硅光技術概述&#xff08;Silicon Photonics&#xff09; 硅光技術主要是用在光通信中&#xff0c;利用硅作為光學介質&#xff0c;通過光傳輸和處理數據。與依賴電子進行數據傳輸的傳統電子電路不同&#xff0c;硅光子學…

MapStruct用法和實踐

一、MapStruct 用法1. 嵌套對象深度映射&#xff08;Deep Mapping&#xff09;// 源對象 public class User {private Address address;// getter/setter }public class Address {private String city;private String street; }// 目標對象 public class UserDTO {private Stri…

設計模式相關面試題

寫在前面 &#x1f525;我把后端Java面試題做了一個匯總&#xff0c;有興趣大家可以看看&#xff01;這里&#x1f449; ??在反復復習面試題時&#xff0c;我發現不同資料的解釋五花八門&#xff0c;容易造成概念混淆。尤其是很多總結性的文章和視頻&#xff0c;要么冗長難…

訪問者設計模式

訪問者設計模式是一種行為模式&#xff0c;允許您向現有對象結構添加新作&#xff0c;而無需修改其類。 它通過允許您將算法與其作的對象分開來實現這一點。 它在以下情況下特別有用&#xff1a; 您有一個復雜的對象結構&#xff08;如 AST、文檔或 UI 元素&#xff09;&#x…

Linux_用 `ps` 按進程名過濾線程,以及用 `pkill` 按進程名安全殺進程

用 ps 按進程名過濾線程&#xff0c;以及用 pkill 按進程名安全殺進程摘要&#xff1a; 過濾線程信息&#xff1a;教你用 ps -C、pgrepps 等多種姿勢&#xff0c;既精準又避免誤殺。按名字殺進程&#xff1a;用 pkill 一把梭&#xff0c;優雅還是強殺隨你選&#xff0c;附帶“先…

關于國產 RAC 和分布式研討

本次研討核心目標是圍繞崖山 DB、達夢 DB、GBASE三款國產數據庫&#xff0c;以及數據庫內核開發呂工程師的分享&#xff0c;深入了解共享集群 RAC 的開發技術。但實際效果未達預期&#xff0c;參會者多圍繞 “共享集群與分布式應用場景” 泛泛而談&#xff0c;缺乏深度技術拆解…

傳輸層協議介紹

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔文章目錄前言一、TCP協議介紹二、TCP報文格式三、TCP三次握手四、TCP四次揮手五、UDP協議介紹六、常見協議及其端口七、TCP與UDP的不同總結前言提示&#xff1a;這里可以添加本…

Vibe Coding 概念提出者 AndrejKarpathy 談強化學習。

在預訓練時代&#xff0c;關鍵在于互聯網文本。你最需要的是一大批量、多樣化且高質量的互聯網文檔&#xff0c;供模型從中學習。在監督微調&#xff08;SFT&#xff09;時代&#xff0c;核心則是對話數據。人們雇傭合同工人為問題撰寫答案&#xff0c;類似于你在 Stack Overfl…

OSI模型和TCP/IP模型區別是什么

問題OSI模型和TCP/IP模型區別是什么我的回答OSI和TCP/IP這兩個協議棧有幾個主要區別&#xff1a;首先&#xff0c;層次結構不同。OSI是七層模型&#xff1a;物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。而TCP/IP是四層模型&#xff1a;數據鏈路層、網絡層、傳…

ros2與gazebo harmonic機械臂仿真項目Moveit2YoloObb的優化

文章目錄 關于項目RVIZ控制Gazebo Harmonic仿真機械臂GraphExecuter創建流程并通過Yolo算法抓取螺栓 關于項目 本文介紹ros2與gazebo harmonic機械臂仿真項目Moveit2YoloObb優化的內容&#xff0c;具體的代碼細節就不贅述了&#xff0c;主要還是演示效果&#xff0c;包括RVIZ控…

Linux 系統調優與CPU-IO-網絡內核參數調優

1. Linux系統調優1.1 安裝工具包在開始監控前&#xff0c;需要確保系統已安裝以下工具包&#xff0c;它們是后續操作的基礎&#xff1a;sysstat&#xff1a;包含 mpstat、iostat、sar 等核心統計工具iotop&#xff1a;專門監控磁盤 I/O 的進程級工具nethogs&#xff1a;按進程查…

laravel學習并連接mysql數據庫,給本地vue項目提供接口

下載laravel laravel下載地址phpstudy_pro\WWW\laravel.env文件 DB_CONNECTIONmysql DB_HOST127.0.0.1 DB_PORT3306 DB_DATABASEclgl //你的數據庫名稱 DB_USERNAMEroot //你的賬號 DB_PASSWORDroot //你的密碼安裝 Laravel CORS 包 composer require fruitcake/laravel-c…

Mybatis 與 Springboot 集成過程詳解

Mybatis 與 Springboot 集成過程詳解一. 核心概念與優勢二.Mybatis 核心類簡介1.MybatisAutoConfiguration2.MapperScans3.MapperScannerRegistrar4.MapperFactoryBean5.Configuration6.MapperRegistry7.MapperProxy 與 MapperProxyFactory7.1核心定位與職責7.22. ??MapperPr…

prometheus alertmanager 對接飛書

alertmanager 直接配置 飛書 的 webhook &#xff0c;發現并不滿足飛書接口的 json 格式。報錯如下levelerror ts2025-08-28T04:57:02.734Z callerdispatch.go:310 componentdispatcher msg"Notify for alerts failed" num_alerts23 err"prometheusalert-webhoo…

『專利好藥用力心腦血管健康』——愛上古中醫(28)(健康生活是coder抒寫優質代碼的前提條件——《黃帝內經》伴讀學習紀要)

心臟血管三通康&#xff0c;古時丸藥精益裝。 筆記模板由python腳本于2025-08-26 18:25:03創建&#xff0c;本篇筆記適合喜歡日常保健養生知識的coder翻閱。 學習的細節是歡悅的歷程 博客的核心價值&#xff1a;在于輸出思考與經驗&#xff0c;而不僅僅是知識的簡單復述。 Pyth…

在 .NET 8.0 中實現 JWT 刷新令牌

介紹在 Web 開發領域&#xff0c;安全是重中之重。JSON Web Tokens (JWT) 已成為在各方之間安全傳輸信息的熱門選擇。然而&#xff0c;在 JWT 過期后&#xff0c;如何維護用戶會話并避免頻繁登錄至關重要。這正是 JWT 刷新令牌應運而生的地方。在本文中&#xff0c;我們將指導您…

深入解析 git push 命令

1. 基礎語法 git push 的基本語法如下: git push <遠程倉庫名> <本地分支名>:<遠程分支名> [選項]<遠程倉庫名>: 通常是 origin(默認的遠程倉庫名稱)。 <本地分支名>:<遠程分支名>: 指定要推送的本地分支以及目標遠程分支。如果省略遠…

UI彈出動畫

簡介的UI彈出動畫 使用方式很簡單 掛載到需要彈出的目標 即可 using UnityEngine; using DG.Tweening; using Unity.VisualScripting;/// <summary>/// 簡潔的UI動畫腳本/// 直接掛載到UI組件上&#xff0c;調用Play()播放縮放彈出動畫/// </summary>public class …

PostgreSQL診斷系列(6/6):配置項全景解析——打造你的專屬優化清單

&#x1f517; 作為《PostgreSQL診斷系列》的收官之作&#xff0c;今天我們系統梳理 postgresql.conf 中的核心參數&#xff0c;將前5篇的“診斷”轉化為“調優”&#xff0c;打造一套生產環境專屬的配置模板。 你是否&#xff1a; 不知道哪些參數該調&#xff1f;害怕調錯導致…