一文弄懂ajax、axios、fetch

156 阅读4分钟

ajax、axios、fetch有什么区别

要了解这个问题,需要先知道这三者到底是什么,以及他们之间的关系

Ajax

简介:

AJAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML。 通过 AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据

AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。Ajax只是个技术统称,可以用XMLHttpRequest来实现Ajax,也可以用Fetch来实现Ajax

特点:

1 优点

1.1 可以无需刷新页面而与服务器端进行通信。(局部刷新)

1.2 允许你根据用户事件来更新部分页面内容。

2 缺点

2.1 没有浏览历史,不能回退

2.2 存在跨域问题(同源)

2.3 SEO 不友好

XMLHttpRequest手写:

在这里插入图片描述 注:解决ie缓存问题

问题:在一些浏览器中(IE),由于缓存机制的存在,ajax 只会发送的第一次请求,剩余多次请求不会再发送给浏览器而是直接加载缓存中的数据。 解决方式:浏览器的缓存是根据 url地址来记录的,所以我们只需要修改 url 地址 即可避免缓存问题 xhr.open("get","/url?t="+Date.now());

Axios

简介:

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,axios本质上也是对原生XHR(XMLHttpReques)的封装,只不过它是基于Promise的,是Promise的实现版本,符合最新的ES规范

特点:

1 从浏览器创建 XMLHttpRequests请求 2 从node.js创建http请求 3 支持 Promise API 4 拦截请求和响应,比如:在请求前添加授权和响应前做一些事情。 5 转换请求数据和响应数据,比如:进行请求加密或者响应数据加密。 6 取消请求 7 自动转换JSON数据 8 客户端支持防御XSRF

使用:

官网地址:www.axios-http.cn/docs/api_in…

Fetch

简介:

fetch()是 XMLHttpRequest 的升级版,用于在 JavaScript 脚本里面发出 HTTP 请求,浏览器原生提供这个对象。

特点:

fetch()使用 Promise,不使用回调函数,因此大大简化了写法,写起来更简洁。 fetch()采用模块化设计,API 分散在多个对象上(Response 对象、 Request 对象、Headers 对象),更合理一些; 相比之下,XMLHttpRequest 的 API 设计并不是很好, 输入、输出、状态都在同一个接口管理,容易写出非常混乱的代码。 fetch()通过数据流(Stream对象)处理数据,可以分块读取,有利于提高网站性能表现,减少内存占用,对于请求大文件或者网速慢的场景相当有用。

使用:

// 请求的网址
let url = '网址';
//发起get请求

 - [ ] List item

let _fetch = fetch(url).then(function (response) {
    //response.status表示响应的http状态码
    if (response.status === 200) {
        // json是返回的response提供的一个方法,
        // 会把返回的json字符串反序列化成对象,也被包装成一个Promise了
        return response.json();
    } else {
        return {};
    }
});
_fetch = _fetch
    .then(function (data) {
        //响应的内容
        console.log(data);
        // 响应数据格式化
        console.log(data.json());
    })
    .catch(function (err) {
        console.log(err);
});`

最后总结:

AJAX、Axios和Fetch都是用于在浏览器中与服务器进行异步通信的技术,但它们之间存在一些区别:

AJAX(Asynchronous JavaScript And XML):AJAX是一种技术统称,它可以通过XMLHttpRequest对象来实现。 AJAX的主要优点是可以在不刷新页面的情况下与服务器端进行通信,并根据用户事件更新部分页面内容。缺点是存在跨域问题,SEO不友好,且在某些浏览器中可能存在缓存问题。

Axios:Axios是一个基于Promise的HTTP客户端,既可以在浏览器中使用,也可以在Node.js中使用。Axios的特点包括支持Promise API、拦截请求和响应、转换请求数据和响应数据、取消请求、自动转换JSON数据以及客户端支持防御XSRF等。使用Axios可以简化代码,提高可读性和可维护性。

Fetch:Fetch是XMLHttpRequest的升级版,用于在JavaScript脚本中发出HTTP请求。Fetch的特点包括使用Promise、模块化设计、通过数据流处理数据等。Fetch的API更加简洁,易于理解和使用。