使用Fetch的GET方法发送数据对象失败,求解决方案
解决Fetch GET请求无法通过body传数据的问题
HTTP规范里GET/HEAD请求不允许携带body,这就是浏览器报错的原因——这类请求的设计逻辑是从服务器获取资源,数据应该通过URL的查询参数传递,而非请求体。下面给两种可行的解决办法:
方案1:改用POST请求(推荐,若后端支持)
如果后端接口支持POST方法接收token,直接把请求方法改成POST,就能正常用body传JSON数据:
var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); // 必须添加这个头,告诉后端请求体是JSON格式 var raw = JSON.stringify({ "token": "<secret>" }); var requestOptions = { method: 'POST', // 把GET改为POST headers: myHeaders, body: raw, redirect: 'follow' }; fetch("https://www.quickly-egypt.com/api/v1/client/address/all", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error));
方案2:将数据拼到URL的查询参数中(必须用GET时)
如果接口只能用GET请求,就把token作为查询参数拼在URL后面:
var token = "<secret>"; // 用URLSearchParams处理参数,自动编码特殊字符避免报错 var params = new URLSearchParams(); params.append('token', token); // 把参数拼接到URL末尾 var url = `https://www.quickly-egypt.com/api/v1/client/address/all?${params.toString()}`; var requestOptions = { method: 'GET', redirect: 'follow' }; fetch(url, requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error));
如果要传递更复杂的对象,也可以把对象拆解成键值对后逐个添加到URLSearchParams里,原生API足够处理大部分简单场景。
内容的提问来源于stack exchange,提问作者Islam Mohamed
相关产品推荐
相关产品推荐

