在 fetch api 中使用 FormData() 不起作用

Posted

技术标签:

【中文标题】在 fetch api 中使用 FormData() 不起作用【英文标题】:Using FormData() inside fetch api is not working 【发布时间】:2020-10-20 00:30:47 【问题描述】:

我读了一遍,但找不到答案。

当我使用 FormData() 时,它返回状态 404 错误请求。

但是,如果我像 const requestBody(下面的示例)一样传递数据(硬编码),它会完美运行。

这是我的代码:

    var formData = new FormData();
    formData.append("nickname", "johxns");
    formData.append("password", "john_password");
    formData.append("email", "john@server.com");

    // If I do it this way, and assign this to body inside fetch, it works perfectly
    // const requestBody = '"nickname": "johxns","password":"john_password","email":"john@server.com"';

    fetch("http://localhost:5000/create_user", 
        // if instead of formData, I assign requestBody to body, it works!
        body: formData,
        headers: 
            "Content-Type": "application/json"
        ,
        method: "POST"
    ).then(function(response) 
        return response.text();
    ).then(function(data)
        console.log('data', data);
    ).catch(function(err)
        console.err(err);
    );

我已经尝试过使用 URLSearchParams,但仍然无法使用。

谢谢。

【问题讨论】:

你试过将formData转成json吗? 好吧,如果它以一种方式而不是另一种方式工作,我会坚持这种工作方式......有什么问题? 【参考方案1】:

如果您不发送 json,则不应将 Content-Type 标头设置为 application/json。根据this 的回答,你不需要设置Content-Type 标头。

正文数据类型必须匹配“Content-Type”标头

Using Fetch

【讨论】:

【参考方案2】:

如果您将Content-Type 设置为application/json,您应该发送 json 数据;如果使用 FormData API,您应该不设置任何 Content-Type,因为 fetch 函数能够确定正确的 Content-Type

更多信息请参见here。

【讨论】:

以上是关于在 fetch api 中使用 FormData() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

通过formData传递在表单上输入的所有值与fetch API的问题

为啥 PHP 无法从 Js FormData fetch 中获取 $_POST 数据?

fetch上传图片(formData数据格式)失败之解决办法

如何使用 fetch 发布内容类型为 application/json

获取 API 请求超时?

react 之 fetch 登录请求formData提交参数