Axios和Fetch之间有什么区别?

334

我正在使用Fetch调用Web服务,但是我也可以使用Axios来做同样的事情。所以现在我感到困惑。我应该选择Axios还是Fetch?


6
我认为这个问题已经在https://github.com/mzabriskie/axios/issues/314上进行了详细讨论。 - Jaydeep Solanki
1
虽然有很多答案,但我发现没有人提到axiso相对于fetch的请求超时。 - Qiulang
Axios是为那些懒惰和未经训练的人准备的。 - morganney
12个回答

0
fetch是现代浏览器中可用的本地API。在浏览器API的上下文中,“本地”意味着该功能已内置于浏览器的JavaScript环境中,无需外部脚本或插件。它是环境的标准部分。例如,fetch现在是Web平台API的标准部分,现代浏览器旨在支持它。就像XMLHttpRequest(导致AJAX出现)对浏览器来说是本地的一样,即使这并不总是如此。对于fetch而言,虽然它是现代浏览器的本地功能,但老版本的浏览器(如IE)需要一个polyfill(提供在不支持其本地支持的旧版浏览器中使用较新功能的脚本)。
优点:
- 本地:不需要任何额外的包或库来使用。 - 基于Promise:可以轻松与async/await一起使用。 - 可读性强的语法:特别适用于简单的GET请求。
缺点:
- 错误处理:不会在HTTP错误状态(例如404或500)上拒绝,只会在网络错误或请求失败时拒绝。 - 功能:某些高级功能(如请求超时、请求取消)不受本地支持,或者需要额外的工作。 - JSON解析:需要额外的步骤来解析JSON(response.json())。

axios

axios是一款流行的第三方HTTP客户端库。

优点:

  • 错误处理:在HTTP错误状态下拒绝承诺,可以简化错误处理。
  • 拦截器:提供在处理或发送请求和响应之前拦截的能力。
  • 超时:内置支持请求超时。
  • 可取消的请求:支持使用CancelToken功能取消请求。
  • 自动JSON解析:自动解析响应中的JSON数据。
  • 更广泛的浏览器支持:具有内置的XHR处理,与旧版浏览器兼容。
  • 转换:允许在发送或接收数据之前对其进行转换。

缺点:

  • 外部依赖:为您的项目增加了额外的依赖。
  • 大小:虽然不算庞大,但仍比原生的fetch要大。

0
我似乎经常要做的工作就是通过ajax发送表单,通常包括附件和几个输入字段。在更经典的工作流程(HTML / PHP / JQuery)中,我已经在客户端使用了 $ .ajax()并在服务器上使用PHP,全部都成功了。
我已经在dart / flutter中使用了axios,但现在我正在学习react来构建我的网站,而JQuery没有意义。
问题是axios在同一表单中发布正常输入字段和上传文件时,在PHP的另一侧给我带来了一些头痛。我尝试了在PHP中使用 $ _POST file_get_contents(“ php:// input”),使用FormData从axios发送或使用json结构,但我无法同时获取文件上传和输入字段。
另一方面,使用Fetch,我已经成功运行了这个代码:
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 处理其他字段数据:

  $posts = [];
  foreach ($_POST as $post) {
      $posts[] =  json_decode($post);
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接