axios中的AJAX

本文通过一个实例展示了如何在网页中引入Axios库,实现GET、POST及通用型AJAX请求。通过在HTML页面中添加按钮,点击按钮触发不同类型的请求,并配置了请求的参数和头部信息。服务器端设置了允许跨域,当请求被触发时,返回响应数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Axios发送AJAX请求

1)引入Axios

bootcdn.cn 搜索 Axios
复制标签链接到代码中

<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script>

案例

页面三个按钮:GET 、 POST 、 通用型方法AJAX
点击按钮分别实现其功能
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>axios 发送 AJAX请求</title>
    <script crossorigin="anonymous" src="https://cdn.bootcdn.net/ajax/libs/axios/0.19.2/axios.js"></script>
</head>

<body>
    <button>GET</button>
    <button>POST</button>
    <button>AJAX</button>

    <script>
        // https://github.com/axios/axios
        const btns = document.querySelectorAll('button');

        //配置 baseURL
        axios.defaults.baseURL = 'http://127.0.0.1:8000';

        btns[0].onclick = function () {
            //GET 请求
            axios.get('/axios-server', {
                //url 参数
                params: {
                    id: 100,
                    vip: 7
                },
                //请求头信息
                headers: {
                    name: 'atguigu',
                    age: 20
                }
            }).then(value => {
                console.log(value);
            });
        }

        btns[1].onclick = function () {
            axios.post('/axios-server', {
                username: 'admin',
                password: 'admin'
            }, {
                //url 
                params: {
                    id: 200,
                    vip: 9
                },
                //请求头参数
                headers: {
                    height: 180,
                    weight: 180,
                }
            });
        }
    
        btns[2].onclick = function(){
            axios({
                //请求方法
                method : 'POST',
                //url
                url: '/axios-server',
                //url参数
                params: {
                    vip:10,
                    level:30
                },
                //头信息
                headers: {
                    a:100,
                    b:200
                },
                //请求体参数
                data: {
                    username: 'admin',
                    password: 'admin'
                }
            }).then(response=>{
                //响应状态码
                console.log(response.status);
                //响应状态字符串
                console.log(response.statusText);
                //响应头信息
                console.log(response.headers);
                //响应体
                console.log(response.data);
            })
        }
    </script>
</body>

</html>

sever.js

//axios 服务
app.all('/axios-server', (request, response) => {
    //设置响应头  设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');
    response.setHeader('Access-Control-Allow-Headers', '*');
    // response.send('Hello jQuery AJAX');
    const data = {name:'尚硅谷'};
    response.send(JSON.stringify(data));
});
<think>嗯,用户想了解axiosAjax的区别以及它们各自的介绍。首先,我需要回忆这两个技术的背景和用途。Ajax是一种用于创建异步Web应用的技术,而axios是一个基于Promise的HTTP客户端,通常用于浏览器和Node.js环境。 接下来,我应该先分别介绍Ajaxaxios的基本概念。Ajax全称是Asynchronous JavaScript and XML,它允许网页在不重新加载的情况下与服务器交换数据。但Ajax本身并不是一个具体的API,而是一种技术方案,通常通过XMLHttpRequest对象来实现。不过,用户在使用原生Ajax时可能会觉得代码比较繁琐,需要处理兼容性和回调地狱的问题。 然后是axios,它是一个第三方库,基于Promise封装,提供了更简洁的API和更好的错误处理机制。相比原生Ajaxaxios支持拦截请求和响应,自动转换JSON数据,并且可以在浏览器和Node.js中使用,这些特点让它在现代前端开发中更受欢迎。 用户可能需要知道它们之间的主要区别。比如,Ajax是技术统称,而axios是具体库;原生Ajax使用回调函数,axios使用Promise;axios有更多高级功能如拦截器、取消请求等。同时,也要提到fetch API,作为现代浏览器的原生方法,和axios相比有什么优缺点,比如fetch需要手动处理JSON转换,而axios自动处理。 还需要考虑用户的实际应用场景。比如,在旧项目中使用jQuery的Ajax可能更常见,而在新项目中,axios或fetch更合适。另外,是否需要处理兼容性,或者需要更简洁的代码结构,这些因素都会影响选择。 另外,用户可能对如何选择使用哪个工具有疑问,所以需要给出一些建议。例如,如果项目已经使用jQuery,继续用它的Ajax可能更方便;如果是现代框架如React或Vue,axios更合适;如果不需要额外依赖,可以考虑fetch。 最后,要确保回答结构清晰,分点说明,帮助用户逐步理解两者的区别和适用场景。同时,注意使用中文,避免技术术语过于晦涩,必要时举例说明。</think>### 一、基本概念分步解析 #### 1. Ajax 技术 (1)**技术本质** Ajax(Asynchronous JavaScript and XML)是一种**异步通信技术**,通过以下组合实现: - XMLHttpRequest(XHR)对象:核心通信接口 - JavaScript:控制请求发送与数据处理 - DOM:动态更新页面内容 (2)**原生实现示例** ```javascript var xhr = new XMLHttpRequest(); xhr.open('GET', '/api/data', true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(JSON.parse(xhr.responseText)); } }; xhr.send(); ``` (3)**技术局限** - 回调地狱问题(多层嵌套回调) - 需手动处理响应数据格式(如JSON解析) - 浏览器兼容性处理(旧版IE需特殊处理) #### 2. Axios 库 (1)**核心特性** - 基于Promise的异步处理 - 自动JSON数据转换 - 请求/响应拦截器 - 客户端XSRF防护 - 请求取消功能(通过CancelToken) (2)**典型使用示例** ```javascript axios.get('/api/data') .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error); }); ``` (3)**高级功能演示** ```javascript // 创建自定义实例 const api = axios.create({ baseURL: 'https://api.example.com', timeout: 5000 }); // 添加请求拦截器 api.interceptors.request.use(config => { config.headers.Authorization = `Bearer ${token}`; return config; }); // 添加响应拦截器 api.interceptors.response.use( response => response.data, error => Promise.reject(error) ); ``` ### 二、技术对比表格 | 特性 | Ajax(原生XHR) | Axios | Fetch API | |---------------------|-----------------------|-------------------------|------------------------| | **语法复杂度** | 高(需手动封装) | 低(链式调用) | 中等(需二次封装) | | **数据解析** | 手动处理 | 自动转换JSON | 需response.json() | | **错误处理** | 手动检测状态码 | 自动捕获HTTP错误 | 不拒绝HTTP错误状态 | | **取消请求** | 原生支持xhr.abort() | 通过CancelToken实现 | 通过AbortController | | **进度监控** | 支持上传/下载进度 | 支持 | 不支持 | | **浏览器兼容** | IE7+ | IE11+ | 现代浏览器 | ### 三、技术选型建议 #### 1. 推荐使用场景 - **传统项目维护**:jQuery的$.ajax仍是合理选择 - **现代SPA应用**:Vue/React+Axios是主流组合 - **轻量级需求**:Fetch API(需注意:`404`不会触发catch) - **需要文件上传进度**:Axios的onUploadProgress #### 2. 性能对比 - **包体积**:Axios(4kb gzip) vs Fetch(内置) - **执行效率**:原生XHR ≈ Fetch > Axios(差异可忽略) #### 3. 异常处理对比 ```javascript // Axios的错误捕获 axios.get('/api') .catch(error => { if (error.response) { // 服务器响应异常(4xx/5xx) } else if (error.request) { // 请求已发出但无响应 } else { // 配置错误 } }); // Fetch的错误处理 fetch('/api') .then(response => { if (!response.ok) throw new Error('HTTP error'); return response.json(); }) .catch(error => console.error(error)); ``` ### 四、演进趋势分析 1. **2015年前**:jQuery Ajax主导 2. **2015年**:Fetch API标准发布 3. **2016年**:Axios成为主流Promise方案 4. **2020年**:浏览器原生支持率突破92% 5. **2023年**:Axios仍保持每周2000万+下载量 ### 五、现代替代方案 1. **GraphQL客户端**:Apollo Client 2. **REST封装库**:SWR(React)、VueQuery 3. **全栈框架内置**:Next.js的API Routes 通过上述分层次的技术解析,开发者可以根据项目需求、团队技术栈、浏览器支持要求等因素,做出最适合的技术选型决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值