ajax、axios、fetch的区别

news/2024/7/10 2:51:05 标签: ajax, vue, js, jquery, javascript

ajax_0">ajax

javascript">$.ajax({
   type: 'POST',
   url: url,
   data: data,
   dataType: dataType,
   success: function () {},
   error: function () {}
});

传统 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.配置和调用方式非常混乱,而且基于事件的异步模型不友好。

axios

javascript">axios({
    method: 'post',
    url: '/user/12345',
    data: {
        firstName: '李',
        lastName: '雅奇'
    }
})
.then(function (response) {
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});

axios 是一个基于Promise 用于浏览器和nodejsHTTP 客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范,它本身具有以下特征:

1. 从浏览器中创建 XMLHttpRequest
2. 支持 Promise API
3. 客户端支持防止CSRF
4. 提供了一些并发请求的接口(重要,方便了很多的操作)
5. 从 node.js 创建 http 请求
6. 拦截请求和响应
7. 转换请求和响应数据
8. 取消请求
9. 自动转换JSON数据

fetch

javascript">fetch('http://example.com/movies.json')
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(myJson);
  });

一、fetch优势:

1. 语法简洁,更加语义化
2. 基于标准 Promise 实现,支持 async/await
3. 同构方便,使用 isomorphic-fetch
4. 更加底层,提供的API丰富(request, response)
5. 脱离了XHR,是ES规范里新的实现方式

二、fetch存在问题

1. fetch是一个低层次的API,你可以把它考虑成原生的XHR,所以使用起来并不是那么舒服,需要进行封装。
2. fetch只对网络请求报错,对400,500都当做成功的请求,服务器返回 400,500 错误码时并不会 reject,只有网络错误这些导致请求不能完成时,fetch 才会被 reject。
3. fetch默认不会带cookie,需要添加配置项: fetch(url, {credentials: 'include'})
4. fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了流量的浪费
5. fetch没有办法原生监测请求的进度,而XHR可以

http://www.niftyadmin.cn/n/1527283.html

相关文章

Vuex辅助函数的使用(mapState、mapActions、mapMutations、mapGetters)

本文章介绍vuex中辅助函数的使用,如果想学习vuex基础的小伙伴可以点击此链接进入上一篇文章 一、为什么需要使用辅助函数 当一个组件需要对多个状态进行操作的时候,代码会有些重复和冗余,我们可以使用辅助函数帮助我们用极少的代码解决这些…

mapState应该怎么去引modules中的数据?

store里的数据分成模块后,mapState辅助函数里应该怎么引模块的数据? store文件结构: - src - components - store- index.js- modules- carts.jsstore中index.js代码: modules: { carts,//注册carts模块}template代…

axios使用方法

axios封装代码传送门&#xff08;可直接使用&#xff09; 1、基本用法 安装 cnpm i axios --save在 main.js 中引入 axios import axios from axios Vue.prototype.$axios axios在组件中使用 axios <script>export default {mounted(){this.$axios.get(/goods.json…

解决VS2019取消对空指针的引用问题,以及空指针报错问题

解决VS2019取消对空指针的引用的警告问题&#xff0c;以及空指针报错问题 取消对空指针的引用警告 &#xff08;之前有个方法是在判断执行后使用return语句退出这个函数&#xff0c;但存在很多问题&#xff0c;比如与函数类型不匹配等等&#xff0c;所以下面改成直接退出程序…

axios封装代码(直接使用)

axios基础用法传送门&#xff08;点击这里&#xff09; 话不多说&#xff0c;直接上代码 一、在组件中调用 封装在http文件中 import axios from axios//创建axios实例 const axiosObj axios.create({baseURL: http://api.web1024.cn,timeout: 8000,params: {key: gxn759} …

Java文本文件的写入与输出

文章目录文件的写入文件读取文件的写入 public static void main(String[] args) throws IOException { PrintWriter out new PrintWriter("data.txt", StandardCharsets.UTF_8); out.print("123456789"); out.printf("%d", 123456); out.clos…

html文本溢出隐藏三个小圆点

直接上代码&#xff1a; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;

深入理解Java字符类型与字符串

深入理解Java字符类型与字符串 文章目录深入理解Java字符类型与字符串1.Unicode编码基本数据类型&#xff1a;char字符串Stringsubstring方法&#xff08;截取字符串&#xff09;join方法&#xff08;&#xff09;&#xff08;连接方法&#xff09;repeat方法&#xff08;重复方…