进行网络请求的三种方法:Ajax、Fetch和Axios

163 阅读2分钟

前言

作为一个前端工作人员经常需要与后端进行数据交互,而Ajax、Fetch和Axios作为网络请求的工具,扮演着重要的角色。本文将深入介绍这三者,探讨它们的特点、使用场景以及优缺点。

Ajax (Asynchronous JavaScript and XML)

Ajax使⽹页实现异步更新,在不重新加载⽹页的情况下,对⽹页部分进行更新。Ajax并不是不是⼀种新技术,而是由XMLHttpRequest的API实现。

请求步骤

//创建 XMLHttpRequest 对象
const ajax = new XMLHttpRequest();
//规定请求的类型、URL 以及是否异步处理请求,通过 XMLHttpRequest 对象的 open() ⽅法与服务端建⽴连接
ajax.open('GET', url, true);
//发送信息⾄服务器时内容编码类型
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//发送请求
ajax.send(null);
//监听服务端的通信状态,接受服务器响应数据
ajax.onreadystatechange = function () {
    if (ajax.readyState == 4 && (ajax.status == 200 || ajax.status == 304)) {
    
    }
};

特点:

  • 基于原生JavaScript开发。
  • 对于简单请求足够,但在复杂场景中可能显得繁琐。
  • 回调函数处理异步结果。

Fetch

fetch 是底层API,代替了XHR,基于promise实现而不是Ajax的封装

请求步骤

fetch("url") 
    .then(response => response.json()) 
    .then(data => console.log(data)) 
    .catch(error => console.error('Error:', error));

特点:

  • 基于promise实现,⽀持async/await
  • 提供的API丰富
  • 脱离XHR
  • 不携带cookie,需要⼿动添加配置项

Axios

Axios 是⼀个基于promise封装的HTTP客户端,可以⽤在浏览器和 node.js中。它本质也是对原⽣XMLHttpRequest的封装,只不过它是Promise的实现版本。

请求步骤

axios({
    url: 'xxx', // 设置请求的地址
    method: "GET", // 设置请求⽅法
    // get请求使⽤params进⾏参数凭借,如果是post请求⽤data
    params: { 
        type: '',
        page: 1
    }
}).then(res => {
    // res为后端返回的数据
    console.log(res);
})

封装请求⽅法

// get 请求
export const Getxxx(
    {
        url,
        params = {}
    }
) {
    return new Promise((resolve, reject) => {
        axios.get(url, {params})
        .then((res) => {
            resolve(res.data)
        })
        .catch(err => {
            reject(err)
        })
    })
}

特点:

  • 提供更多高级功能,如拦截器、取消请求、自动转换JSON等。
  • 对错误处理和请求配置提供了更多选项。
  • 需要通过npm或cdn引入,是第三方库。

如何选择

在选择使用Ajax、Fetch还是Axios时,需要考虑项目的需求和开发者的偏好:

  • 简单场景: 对于简单的请求,使用原生Ajax或Fetch足够。
  • 现代项目: 在现代项目中,使用Fetch可以利用Promise的优势,但需要注意处理错误和携带cookies。
  • 复杂应用: 对于复杂的应用,Axios提供了更多的功能和配置选项,使其成为不错的选择。