1,传统 Ajax 指的是 XMLHttpRequest(XHR), 最早出现的发送后端请求技术,隶属于原始js中,核心使用XMLHttpRequest对象,多个请求之间如果有先后关系的话,就会出现回调地狱。

JQuery ajax 是对原生XHR的封装,除此以外还增添了对JSONP的支持。经过多年的更新维护,真的已经是非常的方便了,优点无需多言;如果是硬要举出几个缺点,那可能只有:

1.本身是针对MVC的编程,不符合现在前端MVVM的浪潮

2.基于原生的XHR开发,XHR本身的架构不清晰。

3.JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理(采取个性化打包的方案又不能享受CDN服务)

4.不符合关注分离(Separation of Concerns)的原则

5.配置和调用方式非常混乱,而且基于事件的异步模型不友好。

2.axios它本身具有以下特征:

1.从浏览器中创建 XMLHttpRequest

2.支持 Promise API

3.客户端支持防止CSRF

4.提供了一些并发请求的接口(重要,方便了很多的操作)

5.从 node.js 创建 http 请求

6.拦截请求和响应

7.转换请求和响应数据

8.取消请求

9.自动转换JSON数据

3.fetch

fetch号称是AJAX的替代品,是在ES6出现的,使用了ES6中的promise对象。Fetch是基于promise设计的。Fetch的代码结构比起ajax简单多了,参数有点像jQuery ajax。但是,一定记住fetch不是ajax的进一步封装,而是原生js,没有使用XMLHttpRequest对象。

fetch的优点:

1.符合关注分离,没有将输入、输出和用事件来跟踪的状态混杂在一个对象里

2.更好更方便的写法

坦白说,上面的理由对我来说完全没有什么说服力,因为不管是Jquery还是Axios都已经帮我们把xhr封装的足够好,使用起来也足够方便,为什么我们还要花费大力气去学习fetch?

我认为fetch的优势主要优势就是:

1. 语法简洁,更加语义化

2. 基于标准 Promise 实现,支持 async/await

3. 同构方便,使用 [isomorphic-fetch](https://github.com/matthew-andrews/isomorphic-fetch)

4.更加底层,提供的API丰富(request, response)

5.脱离了XHR,是ES规范里新的实现方式

最近在使用fetch的时候,也遇到了不少的问题:

fetch是一个低层次的API,你可以把它考虑成原生的XHR,所以使用起来并不是那么舒服,需要进行封装。

例如:

1)fetch只对网络请求报错,对400,500都当做成功的请求,服务器返回 400,500 错误码时并不会 reject,只有网络错误这些导致请求不能完成时,fetch 才会被 reject。

2)fetch默认不会带cookie,需要添加配置项: fetch(url, {credentials: 'include'})

3)fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了流量的浪费

4)fetch没有办法原生监测请求的进度,而XHR可以

ajax和fetch哪个好,axios和ajax,fetch的区别相关推荐

  1. ajax和cs的关系,fetch、axios 与Ajax之间关系

    1.axios 底层封装是XMLHttpRequest对象,实现原理跟ajax一样, 通过封装Promise()对象来处理结果 例子如下: 封装Axios对象进行回调 get方法 var axios ...

  2. [vue] ajax、fetch、axios这三都有什么区别?

    [vue] ajax.fetch.axios这三都有什么区别? ajax, 实际上就是xmlHttpRequest, 旧瓶装新酒的一种新应用的称呼 fetch是新出的规范, 具体实现原理不太清楚, 但 ...

  3. Http Ajax技术哪家强?Axios、Superagent、Request、Fetch、Supertest技能大比拼!

    Http Ajax技术哪家强?Axios.Superagent.Request.Fetch.Supertest技能大比拼! 现在,当您了解所有最著名的 JavaScript 框架时,是时候介绍 202 ...

  4. Ajax请求,JQuery发送请求,Axios请求,Fetch请求总结

    常见的请求方式 1.Ajax请求 定义: 同步与异步的区别: Ajax的工作原理: 实现AJAX的基本步骤: Get请求: Post请求: 2.JQuery发送请求 Get请求: Post请求: 3. ...

  5. HTTP数据请求的方式:fetch与ajax(XMLHttpRequest)与axios

     传统 Ajax 指的是 XMLHttpRequest(XHR),最早出现的发送后端请求技术,核心使用XMLHttpRequest对象,多个请求之间如果有先后关系的话,就会出现回调地狱.JQuery ...

  6. 【AJAX 笔记】AJAX 基本、HTTP 基本、原生 AJAX 的使用,jQuery / Axios / fetch 发送请求、跨域(JSONP/CORS)

    文章目录 1 Ajax 概述 1.1 AJAX 简介 1.2 XML 简介 1.3 AJAX 的特点 1.3.1 AJAX 的优点 1.3.2 AJAX 的缺点 1.4 AJAX 属性和方法 2. H ...

  7. axios和ajax区别

    1.区别 axios是通过promise实现对ajax技术的一种封装,就像jQuery实现ajax封装一样. 简单来说: ajax技术实现了网页的局部数据刷新,axios实现了对ajax的封装. ax ...

  8. 使用rest_framework写api接口的一些注意事项(axios发送ajax请求)

    1. 类继承GenericAPIView,定义queryset 印象深刻的事: 由于原来对于继承关系不太清楚,写接口 APIView/泛指GenericAPIView不太关注queryset 没有设置 ...

  9. Vue之axios发送Ajax请求

    2.10 axios发送ajax请求 axios github 2.10.1 准备工程 创建一个django工程,例如 login.创建完成之后,再创建一个子应用,例如users.最后再设置一下模板文 ...

最新文章

  1. 分布式系统设计原理与方案Dubbo+Zookeeper+Spring整合
  2. python是中国的吗-操作系统3:编程语言和操作系统是什么关系?
  3. leetcode算法题--矩阵中的幸运数
  4. 下方向键_Bash使用$#x27;...#x27;来捕获方向键
  5. day18--django3之Ajax
  6. python连接oracle数据库_深入理解Python3.6连接Oracle数据库
  7. 大道至简读后感(七八章)
  8. ROS入门 TX2+Turtlebot+Kinect2.0配置记录
  9. treelist 判断父子节点_DOM(4)-节点
  10. android防止左向右滑出程序,Android向右滑动关闭Activity(高仿知乎微信)
  11. HDU2084 数塔【DP】
  12. 使用commons-compress操作zip文件(压缩和解压缩)
  13. java事件轮询_用scala实现的nio事件轮询
  14. 分支定界-附Python代码
  15. Invalid MEX-file '/xxx/lk.mexa64': /xxx/anaconda3/lib/./libharfbuzz.so.0: undefined symbol: FT_Done_
  16. 小刘同学的第七十四篇博文
  17. 中国人保为易集康健康科技承保产品责任险,为消费者保驾护航!
  18. 使用BP网络逼近函数-matlab
  19. React官网Hook API 索引模块知识点整理(五)
  20. setheader是什么意思_XMLHTTP中setRequestHeader()简单分析

热门文章

  1. linux定时任务生产java服务无法执行问题群友案例
  2. 闪存必须解决的三大问题
  3. python可变类型和不可变深浅拷贝类型_python3笔记十四:python可变与不可变数据类型+深浅拷贝...
  4. Spring Bean的生命周期以及IOC源码解析
  5. 从业回忆,一次大胆的冒险,程序员转岗项目经理
  6. Java Html转pdf实战
  7. linux服务器虚拟内存设置,修改Linux服务器虚拟内存Swap大小
  8. windows server 2008 r2 定时关机_电脑怎么定时关机 秒懂的Win10定时关机命令使用方法...
  9. 四宫格效果 css_【深度教研】智力游戏“九宫格” 集体教研活动纪实
  10. linux 恢复操作系统,如何恢复Linux操作系统的GRUB引导程?