FormData+fetch 提交数据时如何正确格式数据

发布于 2022-09-02 13:41:34 字数 1374 浏览 21 评论 0

问题描述

react项目,在fetch下使用FormData对form表单元素进行数据封装后进行post提交至服务器,其格式被转为了WebKitFormBoundary模式,如下图
图片描述

代码如下:

export function addChapter() {
    return (dispatch) => {
        let data = new FormData(document.getElementById('admin-edit__form'));
        return fetch('/func', {
                method: "POST",
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
                },
                body: data
            })
            .then(response => response.json())
            .then(json => {
                console.log(json);
            })
            .catch(function(error) {
                console.log('request failed: ', error)
            })
    }
}

若直接使用浏览器原生form表单submit按钮提交,数据格式正常,如下图:
图片描述

form表单基本代码如下:

<form
    method="post"
    action="/func"
    encType="application/x-www-form-urlencoded"
    id="admin-edit__form"
    className="admin-edit__form"
    onSubmit={e => this.HandleSubmit(e)}
>
   ....
</form>

想请问下是否哪里设置错误了?求大神帮助

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

撩人痒 2022-09-09 13:41:34

Content-Type 去掉即可

微暖i 2022-09-09 13:41:34

一些瞎鸡巴扯淡的答案,验证通过了么?

var searchParams = new URLSearchParams()
searchParams.set('method','next')
fetch('https://www.example.com/', {
  method: 'POST',
  body: searchParams
}).then(function(response){
  console.log(response.json())
})

图片描述

或者如果不想使用URLSearchParams对象,则需要在headers对象中设置"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",代码如下

fetch('https://www.example.com/', {
  method: 'POST',
  headers: {
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
  },
  body: "method=next"
}).then(function(response){
  console.log(response.json())
})

希望这个答案能给后面的人解答。

携君以终年 2022-09-09 13:41:34

content-type更改为application/x-www-form-urlencoded
body的参数更改为userName=&password=admin格式的
就可以了。

fetch("http://www.example.org/submit.php", {
  method: "POST",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded"
  },
  body: "userName=&password=admin"
}).then(function(res) {
  if (res.ok) {
    alert("Perfect! Your settings are saved.");
  } else if (res.status == 401) {
    alert("Oops! You are not authorized.");
  }
}, function(e) {
  alert("Error submitting form!");
});
黯淡〆 2022-09-09 13:41:34

最后是如何解决的?

眼角的笑意。 2022-09-09 13:41:34

reacjs 用 fetch 上传图片, 不可设置 header, 参考https://segmentfault.com/a/11...

半葬歌 2022-09-09 13:41:34

clipboard.png

稚气少女 2022-09-09 13:41:34

把headers 注释了 试试

喜爱纠缠 2022-09-09 13:41:34

引用之前微风给的答案,这才是正确的,不知道为什么被忽略了

var searchParams = new URLSearchParams()
searchParams.set('method','next')
fetch('https://www.example.com/', {
  method: 'POST',
  body: searchParams
}).then(function(response){
  console.log(response.json())
})

或者如果不想使用URLSearchParams对象,则需要在headers对象中设置"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",代码如下

fetch('https://www.example.com/', {
  method: 'POST',
  headers: {
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
  },
  body: "method=next"
}).then(function(response){
  console.log(response.json())
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文