【问题标题】:JavaScript fetch request body parameters not received未收到 JavaScript 获取请求正文参数
【发布时间】:2019-11-23 12:59:18
【问题描述】:

背景: 我正在尝试使用 JavaScript 向服务器发送 put 请求并从我正在编写的 html 文件中获取。

问题: 我提出的请求在 Insomnia 中工作,但是当我尝试从 html 发送它时,它没有被正确接收。该代码也是由 Insomnia 生成的。 当我从 html 发送请求时,请求被发送,我得到了一个好的回复,但是服务器没有完成请求中的任务,让我相信它没有收到或者我错过了一些东西。 尝试发送请求时,控制台会显示一个响应,即“ok”、200 等,但也有一个“bodyUsed: false”部分。

Insomnia 生成的函数:

fetch("url", {
  "method": "PUT",
  "headers": {
    "content-type": "application/x-www-form-urlencoded"
  },
  "body": {
    "name": "name",
    "desc": "description"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.log(err);
});

问题: 代码有什么问题吗?服务器如何接收请求而不是正文? “bodyUsed: false”消息是否意味着请求的正文由于某种原因被忽略了?难道这都是服务器的错吗?

免责声明: 我对 Web 开发有点陌生,如果我遗漏了一些明显的观点,请原谅我。

【问题讨论】:

    标签: javascript request fetch put insomnia


    【解决方案1】:

    如果您保留"content-type": "application/x-www-form-urlencoded" 并且您的服务器是这样配置的,您应该使用FormData 发送您的数据,如下所示:

    var formData = new FormData(); 
    formData.append('name', 'Chris');
    formData.append('descr', 'description');
    
    fetch("url", {
      "method": "PUT",
      "headers": {
        "content-type": "application/x-www-form-urlencoded"
      },
      "body": formData
    })
    .then(response => {
      console.log(response);
    })
    .catch(err => {
      console.log(err);
    });
    

    【讨论】:

    • 感谢您的回答,但问题仍然存在。
    【解决方案2】:

    试试这个

    let formData = new FormData();
    
    formData.append('name', 'name value');
    formData.append('desc', 'description value');
    
    fetch('url', {
        method: 'POST',
        credentials: 'same-origin',
        body: formData
    }).then(rawResponse => rawResponse.json())// or rawResponse.text() to get simple string
            .catch(error => {
                console.log(error);
            })
            .then(response => {
                console.log(response);
            });
    

    【讨论】:

    • 我认为我不需要凭据,但我检查了,结果是一样的。另外:浏览器在没有标题的情况下给出错误。我尝试使用 formData,但很遗憾,它没有帮助。
    • credentials: 'same-origin' 我曾经从服务器获取 cookie,否则客户端会忽略它们。事实是我从应用程序中复制粘贴代码,所以我确保它可以工作,也许我忽略了你使用的是 PUT 而不是 POST 方法。
    猜你喜欢
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多