TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码

Ajax 请求队列解决方案并结合elementUi做全局加载状态

2025-07-03
/
0 评论
/
2 阅读
/
正在检测是否收录...
07/03

在Web开发中,当处理多个Ajax请求时,通常会遇到一个问题:每个请求都可能触发一个单独的加载状态,这会导致用户体验上的混乱。为了解决这个问题,我们可以采用一种全局的Ajax请求队列管理方案,并结合Vue.js中的Element UI库来统一控制全局的加载状态。以下是如何实现这一功能的详细步骤和代码示例。

1. 引入Element UI

首先,确保你的项目中已经安装并引入了Element UI。如果没有安装,可以通过npm或yarn来安装:

```bash
npm install element-ui --save

或者

yarn add element-ui
```

在Vue项目中引入Element UI:

```javascript
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);
```

2. 创建全局Ajax请求队列管理器

创建一个用于管理Ajax请求的全局服务或插件,我们将使用axios作为HTTP客户端。如果还没有安装axios,可以通过npm或yarn安装:

```bash
npm install axios --save

或者

yarn add axios
```

创建ajax-manager.js

```javascript
import axios from 'axios';
import { Loading, Message } from 'element-ui';
import Vue from 'vue';

const loadingInstance = Loading.service({ fullscreen: true, lock: true, text: 'Loading...', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)' });
const loading = new Vue(); // 创建一个Vue实例来管理loading的状态和消息
const queue = []; // 用于存储将要执行的请求的队列
let activeRequest = 0; // 当前活跃的请求数
let isLoading = false; // 全局加载状态标志
let timeoutId = null; // 用于取消超时的loading状态延迟清除的定时器ID

function startLoading() {
if (!isLoading) {
isLoading = true;
loadingInstance.start(); // 显示加载动画和文本信息
}
activeRequest++; // 增加活跃请求数
}

function endLoading() {
if (activeRequest > 0) { // 只有当有活跃的请求时才结束加载状态
activeRequest--; // 减少活跃请求数
if (activeRequest === 0) { // 当没有活跃请求时,结束加载动画并重置状态标志和定时器ID
isLoading = false;
loadingInstance.close(); // 关闭加载动画和文本信息
clearTimeout(timeoutId); // 清除定时器,防止延迟关闭加载动画导致的问题
timeoutId = setTimeout(() => { // 设置一个延时任务来清理后续可能的重复调用问题(视具体场景可调整或取消)
if (!isLoading) { // 确保没有其他请求正在进行中时才重置状态标志和关闭加载动画文本信息(如果有的话)
loadingInstance.close(); // 可选:在某些场景下如果只希望显示一个总体的“已无其他操作”的提示而不是关闭动画,则此行可以移除或注释掉以保持动画显示直到用户新操作触发。这里保持默认配置不显示“已无其他操作”提示。
}
}, 500); // 延时500ms来处理可能的重复结束请求的情况(视具体情况而定) // 注:这个延时主要是为了防止因多个Ajax请求几乎同时完成而导致的加载状态多次触发和取消逻辑错误。但应小心使用以避免隐藏实际错误或延时太长导致的用户体验问题。在实际应用中,根据项目需求和测试结果进行调整。
} } } // endLoading function definitions and configurations (注:此为函数定义及配置的注释,可参考调整以符合实际项目需求) // startLoading function definitions and configurations (注:此为函数定义及配置的注释,可参考调整以符合实际项目需求) // queue management functions and configurations (注:此为队列管理函数的注释,用于管理将要执行的请求的逻辑) // 以下部分根据实际需求定义或调整队列管理逻辑,如添加、移除、执行队列中的请求等函数。可参考JavaScript中队列的常见实现方式。 (在ajax-manager.js文件中继续定义和实现剩余部分...)

朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/31590/(转载时请注明本文出处及文章链接)

评论 (0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. 强强强
    2025-04-07
  2. jesse
    2025-01-16
  3. sowxkkxwwk
    2024-11-20
  4. zpzscldkea
    2024-11-20
  5. bruvoaaiju
    2024-11-14

标签云