发送正文为 JavaScript 的 GET 请求 (XMLHttpRequest)

Send a GET request with a body in JavaScript (XMLHttpRequest)

我必须与从 GET 请求正文中获取参数的 API 进行交互。我知道这可能不是最好的主意,但这是构建 API 的方式。

当我尝试使用 XMLHttpRequest 构建查询时,似乎根本没有发送有效负载。您可以 运行 这个并查看网络选项卡;请求已发送,但没有正文(在最新的 Chrome 和 Firefox 中测试):

const data = {
  foo: {
    bar: [1, 2, 3]
  }
}
const xhr = new XMLHttpRequest()
xhr.open('GET', 'https://my-json-server.typicode.com/typicode/demo/posts')
xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8')
xhr.send(JSON.stringify(data))

axios 等库是基于 XMLHttpRequest 构建的,因此它们也无法正常工作...

在JavaScript中有什么方法可以做到这一点吗?

不,无法发送正文为 JavaScript 的 GET 请求。

it looks like the payload is simply not sent

没错。这是在 the specification:

中定义的

The send(body) method must run these steps:

...

  1. If the request method is GET or HEAD, set body to null.

也是通过 Fetch API does not allow a body. From the specification 的请求:

  1. If either init["body"] exists and is non-null or inputBody is non-null, and request’s method is GET or HEAD, then throw a TypeError.

如果 API 可以修复就最好了。

如果这不可能,您可以添加一个服务器端脚本,您可以将其用作将请求传递给 API 的代理。您可以使用 URL 中的数据而不是正文中的 GET 请求调用此脚本,或者使用带有正文的 POST 请求。该脚本然后可以使用正文发出 GET 请求(只要所选语言支持)。