Javascript 如何使用FetchAPI发布Axios中的数据和参数
以以下Axios为例:Javascript 如何使用FetchAPI发布Axios中的数据和参数,javascript,fetch,axios,Javascript,Fetch,Axios,以以下Axios为例: axios.post(this.reportURL, reportData, { params: { param1: paramValue1, param2: paramValue2 }, }); 如何使用fetchapi做同样的事情?我看到参数是这样做的: fetch(this.reportURL, { method: "POST", body: "param1=paramValue1¶m2=paramValue2",
axios.post(this.reportURL, reportData, {
params: {
param1: paramValue1,
param2: paramValue2
},
});
如何使用fetchapi做同样的事情?我看到参数是这样做的:
fetch(this.reportURL, {
method: "POST",
body: "param1=paramValue1¶m2=paramValue2",
headers:
{
"Content-Type": "application/x-www-form-urlencoded"
}
})
由于body键用于存储参数,我是否需要序列化整个reportData对象并将其连接到现有参数
我不明白为什么fetchapi使用body键作为参数
此外,这不是我自己的API,我无法更改预期的POST请求。如果需要从哈希构造查询参数字符串,并且在站点上使用jQuery,可以执行以下操作:
var url=”http://www.abx.com?“+$.param({foo:bar”,baz:kuuq})
获取(url)
以下是fetch标准在其文档中建议的内容(另请参见whatwg/fetch#56中的讨论):
var url=新url(“https://geo.example.org/api"),
params={lat:35.696233,long:139.570431}
Object.keys(params.forEach(key=>url.searchParams.append(key,params[key]))
获取(url)。然后(…)
这要求浏览器实现url.searchParams。较旧的浏览器可能需要polyfill
请快速阅读,但希望能有所帮助
Src:如果需要从散列中构造查询参数字符串,并在站点上使用jQuery,则可以执行以下操作:
var url=”http://www.abx.com?“+$.param({foo:bar”,baz:kuuq})
获取(url)
以下是fetch标准在其文档中建议的内容(另请参见whatwg/fetch#56中的讨论):
var url=新url(“https://geo.example.org/api"),
params={lat:35.696233,long:139.570431}
Object.keys(params.forEach(key=>url.searchParams.append(key,params[key]))
获取(url)。然后(…)
这要求浏览器实现url.searchParams。较旧的浏览器可能需要polyfill
请快速阅读,但希望能有所帮助
Src:你可以
body:JSON.stringify({
param1:paramValue1,
param2:paramValue2
})
您可以这样做
body:JSON.stringify({
param1:paramValue1,
param2:paramValue2
})
看起来很接近,但在第二个示例中,当您发出POST请求时,参数通常会以JSON的形式出现在请求体上:
fetch(this.reportURL, {
method: "POST",
body: JSON.stringify({
param1: paramValue1,
param2: paramValue2
})
})
看起来很接近,但在第二个示例中,当您发出POST请求时,参数通常会以JSON的形式出现在请求体上:
fetch(this.reportURL, {
method: "POST",
body: JSON.stringify({
param1: paramValue1,
param2: paramValue2
})
})
您可以
将reportData
中的片段提取到另一个对象中,并通过JSON将该片段传递给fetch
。将其字符串化
Fetch还支持FormData
,但这与我前面提到的对象方法没有太大区别
您可以将主体指定为以下内容:
阵列缓冲器
ArrayBufferView(Uint8Array和friends)
Blob/文件
串
URLSearchParams
FormData
您可以将reportData
中的片段提取到另一个对象中,并通过JSON将该片段传递给fetch
。将其字符串化
Fetch还支持FormData
,但这与我前面提到的对象方法没有太大区别
您可以将主体指定为以下内容:
阵列缓冲器
ArrayBufferView(Uint8Array和friends)
Blob/文件
串
URLSearchParams
FormData
令人沮丧的是,fetch()。您只需将它们放在直接获取的URL中。这是一个争论点,您可以在GitHub上阅读:
有几种方法可以模拟它:
constURL=新url(“http://www.example.com");
常量参数={
福:“酒吧”,
嘶嘶声:“嗡嗡声”
};
常数数据={
更多:“数据”,
“我”,
想要:“去”,
发送:“请”
};
Object.entries(params.forEach([k,v])=>url.searchParams.append(k,v));
console.log(url);
获取(url,{//url为http://www.example.com/?foo=bar&fizz=buzz
方法:“张贴”,
body:JSON.stringify(data)//实际的body
});代码>令人沮丧的是,fetch()
并没有真正提供一种“干净”的方式来提供查询字符串URL参数。您只需将它们放在直接获取的URL中。这是一个争论点,您可以在GitHub上阅读:
有几种方法可以模拟它:
constURL=新url(“http://www.example.com");
常量参数={
福:“酒吧”,
嘶嘶声:“嗡嗡声”
};
常数数据={
更多:“数据”,
“我”,
想要:“去”,
发送:“请”
};
Object.entries(params.forEach([k,v])=>url.searchParams.append(k,v));
console.log(url);
获取(url,{//url为http://www.example.com/?foo=bar&fizz=buzz
方法:“张贴”,
body:JSON.stringify(data)//实际的body
});代码>除非我误读了axios文档,否则它们是不同的。第一个参数将附加这些参数作为URL参数,即example.com?p1=foo&p2=bar
。第二个将把主体附加为请求的实际主体,而不是作为URL的一部分。您正在尝试执行哪项操作。您无法从reportData中提取所需的片段并创建自己的对象以传递给获取?您不能更改POST请求是什么意思?@zero298我正在尝试两者兼而有之,因为API需要参数和JSON数据。@Akrion我可以创建自己的对象,我想我想知道您的建议是否确实是正确的方法。除非我误读了axios文档,否则它们是不同的。第一个参数将附加这些参数作为URL参数,即example.com?p1=foo&p2=bar
。第二个将把主体附加为请求的实际主体,而不是作为URL的一部分。你想做哪一个。你不能extra