使用JavaScript(XMLHttpRequest)发送带有正文的GET请求[复制]

问题描述 投票:4回答:1

这个问题在这里已有答案:

我必须与一个API进行交互,该API从GET请求的主体中获取参数。我知道这可能不是最好的主意,但它是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 ajax rest xmlhttprequest http-get
1个回答
3
投票

不,不可能在JavaScript中发送带有正文的GET请求。

看起来好像没有发送有效载荷

那是正确的。这在the specification中定义:

send(body)方法必须运行以下步骤:

...

  1. 如果请求方法是GETHEAD,请将body设置为null。

此外,通过Fetch API的请求不允许身体。来自the specification

  1. 如果init [“body”]存在且非null或inputBody为非null,并且request的方法为GETHEAD,则抛出TypeError。

如果可以修复API,那将是最好的。

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

© www.soinside.com 2019 - 2024. All rights reserved.