我使用Fetch调用web服务,但我可以在Axios的帮助下做同样的事情。现在我很困惑。我应该选择Axios还是Fetch?
它们是HTTP请求库…
我最终有同样的怀疑,但这个帖子中的表使我选择isomorphic-fetch。它是fetch,但适用于NodeJS。
isomorphic-fetch
fetch
http://andrewhfarmer.com/ajax-libraries/
上面的链接无效 相同的表在这里:https://www.javascriptstuff.com/ajax-libraries/
根据mzabriskie GitHub上:
总的来说,它们非常相似。axios的一些好处: transformer:允许在请求发出之前或接收到响应之后对数据进行转换 拦截器:允许你完全改变请求或响应(头)。另外,在请求被发送之前执行异步操作 承诺解决 内置XSRF保护
总的来说,它们非常相似。axios的一些好处:
transformer:允许在请求发出之前或接收到响应之后对数据进行转换
拦截器:允许你完全改变请求或响应(头)。另外,在请求被发送之前执行异步操作 承诺解决
请检查浏览器支持Axios
我认为您应该使用axios。
除了……我在测试中使用了各种lib,并注意到它们对4xx请求的不同处理。在这种情况下,我的测试返回一个json对象,响应为400。这是3个流行的libs处理响应的方式:
// request-promise-native const body = request({ url: url, json: true }) const res = await t.throws(body); console.log(res.error) // node-fetch const body = await fetch(url) console.log(await body.json()) // Axios const body = axios.get(url) const res = await t.throws(body); console.log(res.response.data)
有趣的是,request-promise-native和axios抛出4xx响应,而node-fetch没有。fetch还使用了json解析的promise。
request-promise-native
axios
node-fetch
Fetch和Axios在功能上非常相似,但为了更多的向后兼容性,Axios似乎工作得更好(例如,Fetch在IE 11中不起作用,检查这篇文章)
此外,如果您使用JSON请求,以下是我偶然发现的一些差异。
获取JSON post请求
let url = 'https://someurl.com'; let options = { method: 'POST', mode: 'cors', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8' }, body: JSON.stringify({ property_one: value_one, property_two: value_two }) }; let response = await fetch(url, options); let responseOK = response && response.ok; if (responseOK) { let data = await response.json(); // do something with data }
Axios JSON post请求
let url = 'https://someurl.com'; let options = { method: 'POST', url: url, headers: { 'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8' }, data: { property_one: value_one, property_two: value_two } }; let response = await axios(options); let responseOK = response && response.status === 200 && response.statusText === 'OK'; if (responseOK) { let data = await response.data; // do something with data }
所以:
axios的好处:
axios相对于fetch的优势 . >
Axios是一个独立的第三方包,可以使用NPM轻松安装到React项目中。
你提到的另一个选项是fetch函数。与Axios不同,fetch()内置在大多数现代浏览器中。使用fetch,您不需要安装第三方包。
fetch()
所以这取决于你,你可以使用fetch(),如果你不知道你在做什么,可能会搞砸,或者只是使用Axios,这在我看来更直接。
在fetchapi &之间多一个主要区别;axios API
对于fetch,我们需要处理两个承诺。使用axios,我们可以直接访问响应对象数据属性中的JSON结果。
获取API,需要处理两个承诺来获得JSON对象属性中的响应数据。而axios的结果是JSON对象。
我会说更好的使用axios,直接处理拦截器,头配置,设置cookie和错误处理。
参考这个
一份工作,我做了很多似乎,这是通过ajax发送表单,通常包括一个附件和几个输入字段。在更经典的工作流程(HTML/PHP/JQuery)中,我已经在客户端和服务器端成功地使用了$.ajax()。
$.ajax()
我已经使用axios dart/flutter,但现在我正在学习react来构建我的网站,JQuery没有意义。
问题是axios在另一方面给了我一些头疼的PHP,当张贴正常的输入字段和上传文件在同一形式。我尝试了PHP中的$_POST和file_get_contents("php://input"),从axios与FormData或使用json构造发送,但我永远无法同时获得文件上传和输入字段。
$_POST
file_get_contents("php://input")
另一方面,我成功地使用了下面的代码:
var formid = e.target.id; // populate FormData var fd = buildFormData(formid); // post to remote fetch('apiurl.php', { method: 'POST', body: fd, headers: { 'Authorization' : 'auth', "X-Requested-With" : "XMLHttpRequest" } })
在PHP方面,我能够通过$_FILES检索上传,并通过$_POST处理其他字段数据:
$_FILES
$posts = []; foreach ($_POST as $post) { $posts[] = json_decode($post); }
Axios是一个基于承诺的HTTP客户端库,而Fetch是一个用于发出API请求的javascript API。
参考链接:https://github.com/axios/axios#browser-support
https://caniuse.com/fetch