好的,我知道这是一个坏主意,不应该这样做但是为了这个问题,请假设没有别的方法 - 我给了API端点,需要GET请求,空对象作为正文。
有没有办法从浏览器做异步请求?
我正在使用axios
库,其中使用了XMLHttpRequest
,MDN说send
在HTTP方法GET
时擦除了正文。
我尝试使用原生fetch
,但它在浏览器中给出了这个错误:
TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.
有什么办法吗?
答案 0 :(得分:2)
不,没有。
GET requests无法拥有请求正文,您无法让他们拥有请求正文。 GET请求只检索数据,它们从不发送数据。
需要使用空对象作为正文的GET请求的API不起作用。
显然,允许GET请求有一个正文。大多数实现将忽略它或拒绝请求。但即使提供API的服务器允许使用正文,也无法使用它:
来自XMLHttpRequest#send
的规范:
发起请求。可选参数提供请求实体主体。 如果请求方法是GET或HEAD,则忽略该参数。引发" InvalidStateError"如果状态未打开或者设置了send()标志,则为异常。
根据fetch API中的Request
class规范:
如果init的正文成员存在并且为非null或 inputBody为非null ,并且请求的方法为
GET
或HEAD
,然后抛出TypeError 。
这意味着您的问题的答案仍然是否。