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

时间:2019-02-21 15:42:53

标签: javascript ajax rest xmlhttprequest http-get

我必须与从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来实现吗?

1 个答案:

答案 0 :(得分:3)

否,无法使用JavaScript在正文中发送GET请求。

  

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

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

  

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

     

...

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

另外,通过Fetch API进行的请求不允许使用主体。来自the specification

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

最好是可以修复API。

如果无法实现,则可以添加服务器端脚本,将其用作将请求传递到API的代理。然后,您可以使用带有URL中数据而不是正文的GET请求或带有正文的POST请求来调用此脚本。然后,该脚本可以使用主体发出GET请求(只要所选语言支持它即可)。