fetch使用FormData表单提交踩坑记录

Fetch表单提交和跨域请求 表单提交和跨域请求1.跨域2.fetch请求 1.跨域 全称是"跨域资源共享"(Cross-origin resource sharing) 解决跨域基本就是后端添加 Response Header import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowir 阅读详情

项目场景:

提示:这里简述项目相关背景:

在react框架中,使用fetch进行表单提交(不是文件),之前都是json传参数。


问题

代码如下

export const fetchMethod = ({ method, params }) => {
  let headers = {
     'Content-Type': 'application/json; charset=UTF-8',
	 'X-Requested-With': 'XMLHttpRequest',
	 'token': '123123',
  };

  const checkStatus = (response) => {
    if (response.ok) {
      return response.json();
    }
    const error1 = new Error(response.status);
    error1.response = response;
    throw error1;
  };

  return fetch(`地址`, {
    headers,
    method: 'POST',
    body: JSON.stringify(params),
    credentials: 'include',
  }).then(checkStatus).then((result) => {
	return result;
  }).catch(err => Promise.reject(err));

报错如下:传参根本不是表单格式
在这里插入图片描述


尝试和报错:

  1. 认真查看了代码,表单传参应该不能使用JSON.stringify(params),则进行修改。
    在这里插入图片描述
    但是,报错如下
    在这里插入图片描述
    传参还是不对,继续看!!!

  2. 看到了header里面的'Content-Type': 'application/json; charset=UTF-8',有问题。

    修改为'Content-Type': 'multipart/form-data'之后有报错了。。。
    在这里插入图片描述
    后来看multipart/form-data是传文件的时候用的

  3. 继续改Content-Type': 'application/x-www-form-urlencoded'
    报错如下:
    在这里插入图片描述
    格式有formData,but 还是不对诶

然后就各种搜


解决方案:

fetch提交自定义表单时,不要设置Content-Type的值,最后去掉就好了。

终于好了

在这里插入图片描述

解决之后感觉还挺简单的,但是找原因也是花了好久,之前没用过fetch,然后对Content-Type也不是很熟悉,做个总结吧!


总结

  1. headers 中常用的 Content-Type

    Content-Type的格式:type/subtype ;parameter
    (1)type:主类型,任意的字符串,如text,如果是 * 号代表所有;
    (2)subtype :子类型,任意的字符串,如html,如果是*号代表所有,用“/”与主类型隔开;
    (3)parameter:可选参数,如charset,boundary等。

    取值场景
    application/json参数本身就是json格式的数据,服务端/客户端会按json格式解析数据
    application/xml 和 text/xml与application/json类似,这里用的是xml格式的数据
    multipart/form-data首先生成了一个 boundary 用于分割不同的字段,最后以------boundary–为结束标识。multipart/form-data支持文件上传的格式,一般需要上传文件的表单则用该类型。
    application/x-www-form-urlencoded如果是中文或特殊字符会自动进行URL转码。不支持文件,一般用于表单提交
Node.js原生fetch API实战:从基础使用到生产级封装 HTTP请求是网络编程和Web开发中的基础操作,用于客户端与服务器之间的数据交换。其核心原理基于请求-响应模型,通过TCP/IP协议栈传输数据。在现代JavaScript生态中,原生fetch API因其标准化和无需额外依赖的优势,成为处理网络请求的重要技术。它提供了基于Promise的异步接口,能有效提升代码可读性和维护性。在Node.js环境中,自v18版本起,fetch API被纳入稳定标准库,这为后端服务开发带来了显著的工程价值,例如减少第三方依赖、统一前后端请求模式以及潜在的运行性能优化。其典型应 阅读详情

相关推荐

高效 DEM 拼接

通过以上步骤的系统实施,能够实现高效、准确的大型地理信息系统 DEM 数据拼接,满足复杂和大规模项目的应用需求。

llhllq2015的博客 1032

fetch处理form-data请求(本地文件地址)以及普通fetch请求

【代码】fetch处理form-data请求(本地文件地址)

大青虫的博客 1974

零成本接入Gemini Pro:GCP+NewAPI+OpenCode全栈方案

AI编程助手在现代开发流程中扮演着越来越重要的角色,其核心原理是通过大语言模型理解开发者意图并生成代码。以Gemini Pro为代表的顶级模型虽然能力出众,但成本控制和接入复杂度成为主要痛点。通过Google Cloud Platform的免费额度与开源工具链组合,开发者可以构建零成本的AI辅助开发环境。该方案采用Vertex AI作为基础模型服务,通过New API实现协议转换,最终与OpenCode终端工具深度集成。这种架构特别适合需要长期稳定使用AI编程助手的开发者,既能享受Gemini Pro的百万

weixin_29051245的博客 428

fetch使用formdata数据格式发送请求

修改请求content-type 请求接口都是使用的封装好的request,对于post请求统一都是application/json。 但是后台同学可能是为了能直接使用之前已有的接口,让我将仅仅这一个的接口请求改为formdata的提交形式,也就是application/x-www-form-urlencoded。之前所有请求都走的request,现在就要修改 两种方式修改: 1、在req...

赵乘风_i 2万+

ENVI基于Landsat影像构建郑州市2000-2019年遥感生态指数RSEI

本文基于landsat5、landsat7、landsat8三种传感器的影像,使用ENVI软件构建郑州市2000-2019年遥感生态指数RSEI。内含ENVI详细操作、使用的公式以及构建结果。

Lexicopperfield的博客 1万+

BVH2SMPL 实战笔记

BVH2SMPL 实战笔记

jacke121的专栏 840

【fetch】用 Form Data 格式发送数据

fetch 把数据发送到 Form Data 里面传给后端

qq_45677671的博客 2847

机器人中的数值优化(十五)——PHR增广拉格朗日乘子法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 2001

踩坑:fetch上传formData文件。 无需额外增加headers、浏览器会自动根据文件加上headers 生成boundary

一、场景 想要实现的效果:获取到图片本地内容后,通过 fetch 来上传 formData 格式数据。 二、遇到的问题 有问题的请求: function request(params){ const { api, data } = params; const url = window.location.origin + api; return fetch(url,{ method:"POST", headers:{ 'Content-Type': 'multipart/fo

Xpy 的博客 4040

金砖大赛-第二届网络安全防护治理实战技能大赛全国总决赛WP

格式进行md4加密,然后将小写的md4密文进行作为flag信息进行提交,提交格式为flag{MD4小写},例如调用频率异常高的user_id是user_xxx,使用的非公开模型名称是model-name,具体调用次数为10,那么按照格式,对user_xxx:model-name:10进行md4加密后,提交范例为:flag{dd00cb9e393f4a9ac639294b3cfe4d6a}挖矿木马是通过远程脚本进行部署的,请登录到失陷的服务器上,找到并分析挖矿木马是从那个远程IP下载的。

Laffrey的专栏 239

给跨代引用记一本账:Java GC 的分配路径、卡表写屏障与收集器版图快速回顾

本文把 Java GC 的零散名词串成一条推理链路:从 TLAB 指针碰撞分配、逃逸分析,到 Eden、Survivor 与晋升的四条路,重点拆解卡表与写屏障如何为老年代指向新生代的引用记账,及 Minor GC 如何只扫脏卡。基于 JDK 8 实测:分散写使 Young GC 停顿涨 10~15 倍,条件卡标记消除卡表伪共享,计数循环让 System.gc 等待 2.7 秒,Survivor 过小使晋升量增加约 400 倍。文末梳理 JDK 8 到 27 的收集器演进、选型路径与排查顺序。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 17万+

react fetch提交formdata格式数据

1.第一种方式,设置请求头,处理请求参数 export function formDataFetch(url, params) { let arr = Object.values(params) let data = ''; Object.keys(params).forEach((key, index) => { let d = '' index !== Number(arr.length - 1)?d = key + '=' + params[key]+ '&':

Cynthia_Wiki的博客 1906

14、网络切片技术:原理、应用与挑战

本文详细探讨了网络切片技术的原理、应用场景及其在5G网络中的重要性。网络切片作为一种关键的网络架构技术,能够在同一物理网络上创建多个独立的逻辑网络,以满足不同应用对安全性、可靠性和性能的多样化需求。文章深入分析了网络切片在5G、SDN/NFV等技术背景下的发展与挑战,并探讨了其在制造业、交通运输、零售等多个行业的实际应用。此外,还介绍了网络切片的部署流程、未来发展趋势以及相关技术难点,为读者全面了解网络切片技术提供了有价值的参考。

palm99的专栏 253

FormData 获取表单值 发送数据

前言:怎么每天都能遇到这么奇奇怪怪的问题。当有这种想法的时候还是证明自己实力太差了,需要提升的还有很多呀! 事情是这样的 需要做一个的表单提交需求 提交成功与失败都有个提示?心想 这还不简单 把要传递的参数传给后台 然后给我个返回值 我拿着返回值判断不就OK了 想到这样我就开始做了 ) 先把大致写出来 Index import React from 'react' import { Form, Input, Button, Select } from 'antd'; const { Option } =

臧小川的博客 2213

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Fetch API 的使用和采坑记录

Fetch 是比 XHR 更好用的请求方式,天生自带 Promise,在上传文件时也无需手动配置 Content-Type 头部。当然,在实际项目开发中,还是要基于现有要求做一些封装。所以除了 axios,原生Fetch 现在也是一个不错的选择。最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。

小陈的博客 786

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

antDesignPro upload+fetch+formdata实现上传

需要的数据格式是这样的,之前遇到过获取不到参数或者类型不对等各种问题;现在将解决方案做个记录: 1、用formdata封装数据: formData.append('file', fileList[0].originFileObj); formData.append('任意参数', 任意值); 2、调用dispatch时的payload: formdata 3、service文件夹的调用接口的js特别注意: method: 'POST', data: params, headers: { .

weixin_45190306的博客 2014

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

react使用antd实现手动上传文件(提交表单)

前言:最近在做一个后台管理项目涉及到上传文件,使用antd里的Upload实现上传文件。记录一下遇到的问题和坑。 1.要实现的效果 我要实现的效果就是点击上传文件,选择完文件后点击ok(也就是提交表单后在上传)其实就是手动上传文件。下面我来介绍一下我的做法和我遇到的一些坑。 2.实现步骤 1.引入所需antd的部件 import { Table, Button, Modal, Fo...

从事前端,不断积累经验,学习新的技术。头像不是本人是莉莉崽(美貌、可爱集于一身的小姐姐,小仙女),一个宝藏博主,值得喜欢! 1万+

HTML 表单处理进阶:验证与提交机制的学习心得与进度(二)

HTML 表单处理进阶:验证与提交机制的学习心得与进度(二)

1689

如何用 FormData 配合 Fetch 实现无刷新的多文件上传

用 FormData 配合 Fetch 实现多文件无刷新上传,核心是把 <input type="file" multiple> 选中的文件构造成 FormData 对象,再通过 Fetch 发送到后端,同时处理好进度、错误和响应解析。// 字段名统一,后端接收为多文件 } try { const res = await fetch('/upload', { method: 'POST', body: formData, //?

2401_83263558的博客 200

fetch post踩坑记录

当个请求参数时,可以写为 fetch(url, { method: 'POST', body: JSON.stringify({ planID: val, }), }) .then(res => res.json()) .then((response) => { if (response.code === '0') { console.log(response.code); } }); 多个请求体时,写为 const fo

yh8899abc的博客 302

Fetch API与FormData实战:无需手动设置Content-Type的文件上传指南

本文详细介绍了使用Fetch API与FormData实现文件上传的实战指南,重点讲解了如何避免手动设置Content-Type的常见错误。通过FormData对象自动处理multipart/form-data格式,简化代码并提升开发效率,适用于Web开发中的文件上传场景。

green的博客 668

AI问答:理解 FormData 和 fd.append(‘file‘, file) / 文件上传 / 多文件上传 / form 表单

本文介绍了JavaScript中FormData对象的使用方法,特别针对文件上传场景。FormData用于构造表单数据,主要步骤包括:创建FormData实例后,用append()方法添加字段(如文件对象),其中'file'为服务器接收参数名。文件可来自<input type="file">或拖放操作,发送时通过fetch或XMLHttpRequest自动处理Content-Type。服务器端需使用multer等中间件接收multipart/form-data数据。关键点包括:浏览器自动处理编码、支持多文件

snow的博客 663

RequestPayload和Formdata

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33744141的博客 202

基于帆软附件上传开发踩坑记录

这段代码实现了一个动态文件上传功能:通过JavaScript动态创建隐藏的文件输入元素,触发文件选择对话框,使用Fetch API将选中的文件以FormData形式POST到服务器端(http://127.0.0.1:8080/fileUpload)。代码包含完整的错误处理流程,上传成功或失败都会显示相应提示,并最终清理临时创建的文件输入元素。整个过程异步执行,支持可选的身份验证头信息,并可在上传完成后更新界面显示。

cx5214的博客 759

node端上传图片踩坑记录

关注“重度前端”助力前端深度学习━━━━━前言最近在做一个项目,有需要在node端进行上传图片,一直搞得都是浏览器的上传,node端这次是头一次搞,踩了不少坑,前后花了好...

zz_jesse的博客 689
上一篇: react-router-dom源码分析
下一篇: 初探Restful API
apple_2021
博客等级 码龄8年 1529粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值