0

上下文: 我正在尝试使用 JavaScript 向服务器发送一个放置请求,并从我正在编写的 html 文件中获取。

问题: 我提出的请求在 Insomnia 中工作,但是当我尝试从 html 发送它时,它没有被正确接收。该代码也是由 Insomnia 生成的。当我从 html 发送请求时,我得到了一个 ok 回复,但是服务器没有完成请求中的任务,导致我相信它没有收到或者我错过了一些东西。当尝试发送请求时,控制台会显示一个响应,上面写着“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 开发有点陌生,如果我遗漏了一些明显的观点,请原谅我。

4

2 回答 2

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);
});
于 2019-11-23T13:09:19.990 回答
-1

试试这个

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);
        });
于 2019-11-23T13:06:39.047 回答