如何使用Axios将请求发送到包含查询字符串的URL?

kqhtkvqz  于 2022-11-05  发布在  iOS
关注(0)|答案(3)|浏览(241)

我正在尝试将一段代码从Axios 0.27.2升级到1.0.0,处理带有查询字符串的URL的方式似乎中断了。也就是说,我得到了404响应,实际使用的URL看起来与以前不同,因为缺少问号。
URL如下所示:https://my.server.com/some/path?foo=bar&baz=abc以前的axios使用的是这个。在1.0.0版本中,实际发送的URL是:https://my.server.com/some/pathfoo=bar&baz=abc
类似的问题都围绕着如何构建一个查询字符串以及axios接受一个params对象的事实。在我的例子中,我从其他地方得到了一个包含/可能已经包含查询字符串的URL。我如何说服Axios使用这个URL而不以某种方式对其进行更改?

vfh0ocws

vfh0ocws1#

axios.get('my-url', {
  params: {
    foo: "baz",
    baz: "abc",
  }
}).then(...)

如果是CORS REQUEST,则需要指定(设置axios选项,在请求之前)

4zcjmb1e

4zcjmb1e2#

请参阅https://github.com/axios/axios/issues/4999
这是Axios 1.0.0中的一个错误,已在1.1.0中修复

xyhw6mcr

xyhw6mcr3#

您可以通过构建一个函数来解决这个问题,在传递给axios之前,将接收到的url拆分为包含基本url和params的对象。

function getUrlParams (url) {
const fullUrl = url;

const splitUrl = fullUrl.split("?");

const newUrl = splitUrl[0];

const paramsArray = splitUrl[1].split("&");

let paramsObj = {};

for(let i = 0; i < paramsArray.length; i++)
{
 const arr = paramsArray[i].split("=");
 const keyName = arr[0];
 const value = arr[1];
  paramsObj = {...paramsObj, [keyName]: value};
}
const data = {
base: newUrl,
params: paramsObj
}
return data;
}

const url = getUrlParams("https://my.server.com/some/path?foo=bar&baz=abc");

console.log(url)

那么对于axios调用你可以做

axios.post(url.base, null, { params: url.params})

相关问题