当前位置: 首页 > news >正文

js 频繁点击切换两个按钮发送请求,显示最后一次发送请求的结果

在JavaScript中处理频繁点击切换两个按钮发送请求并显示最后一次发送请求的结果,可以通过以下几种方法来实现:

方法1:使用Promiseasync/await

你可以使用async/await来处理异步请求,并确保在发送请求时,之前的请求被取消或者忽略。这可以通过AbortController来实现。

 

let controller = null;async function fetchData(url) {if (controller) {controller.abort(); // 取消之前的请求}controller = new AbortController();const signal = controller.signal;try {const response = await fetch(url, { signal });const data = await response.json();console.log(data); // 处理数据return data; // 返回数据,可以在这里更新UI} catch (error) {if (error.name === 'AbortError') {console.log('Fetch aborted'); // 忽略取消的错误} else {console.error('Error:', error); // 处理其他错误}}
}// 绑定到按钮点击事件
document.getElementById('button1').addEventListener('click', () => {fetchData('https://api.example.com/data1');
});document.getElementById('button2').addEventListener('click', () => {fetchData('https://api.example.com/data2');
});

  

方法2:使用setTimeout延迟执行请求

如果你只是想简单地避免在短时间内多次点击导致的问题,可以使用setTimeout来延迟执行下一次请求,直到当前请求完成。

let requestPending = false;function fetchData(url) {if (requestPending) return; // 如果请求正在进行,则直接返回requestPending = true;setTimeout(() => { requestPending = false; }, 500); // 设置一个延迟,例如500毫秒后重置状态fetch(url).then(response => response.json()).then(data => {console.log(data); // 处理数据// 更新UI等操作}).catch(error => console.error('Error:', error)).finally(() => { requestPending = false; }); // 确保在完成后重置状态
}// 绑定到按钮点击事件
document.getElementById('button1').addEventListener('click', () => {fetchData('https://api.example.com/data1');
});document.getElementById('button2').addEventListener('click', () => {fetchData('https://api.example.com/data2');
});

  

方法3:使用fetch的缓存机制(不常用)

对于某些场景,如果你只是想获取最后一次请求的结果,可以考虑不立即处理响应,而是缓存它,然后在最后一次请求完成后处理。这种方法比较复杂,通常不推荐,除非有特定需求。例如:

let lastResponse = null;
let lastUrl = ''; // 用于记录最后一次请求的URL,以防万一需要区分处理不同的URL响应。function fetchData(url) {fetch(url).then(response => response.json()).then(data => {lastResponse = data; // 缓存最后一次响应的数据lastUrl = url; // 记录最后一次请求的URL(可选)if (url === lastUrl) { // 确保是最后一次请求的响应被处理(如果有多个按钮且有不同URL的情况)console.log(lastResponse); // 处理数据(只在最后一次请求后)// 更新UI等操作(只在最后一次请求后)}}).catch(error => console.error('Error:', error));
}

  

注意:这种方法在某些情况下可能不够准确,特别是在快速连续点击时。更好的方式是使用AbortController或延迟执行。

总结:推荐使用AbortController结合async/await的方法,它既简洁又有效

http://www.jsqmd.com/news/44639/

相关文章:

  • 缝裤子 —— 北京八达岭附件 —— 河北怀来县城(张家口市)—— 2025年11月份
  • 2025年餐饮火锅底料批发厂家权威推荐榜单:袋装火锅底料/火锅底料/火锅底料牛油入境美国源头厂家精选
  • 如何通过Python SDK获取Collection中已存在的Doc
  • AI养蛊:让钓鱼邮件和反钓鱼邮件系统打一架
  • lasso
  • 当下采购管理系统开发公司哪家可靠
  • 质量好的工业吸尘器推荐:多场景适用品牌解析
  • 2025年11月岩心钻机供应商排行榜单精选
  • 工业吸尘器十大品牌推荐 2025年热门型号选购参考
  • 今年采购管理系统服务推荐榜
  • 2025年市场履带钻机供货厂家榜单Top5权威解析
  • 2025年岩心钻机供货商推荐排行榜单Top10
  • Openwrt-Ipv6设置(中继获取)
  • 今年采购管理系统开发公司推荐几家
  • 工厂用工业吸尘器选购指南与实用推荐
  • 2025年食品包装盒清废机制造厂权威推荐榜单:化妆品盒清废机/药盒清废机/礼盒自动清废机源头厂家精选
  • 2025瓷砖行业十大品牌终极推荐:聚焦耐磨防污核心性能,搭配全周期服务,打造省心装修体验
  • AI学习全景图:从大模型到RAG,从工具到变现,一条从0到1的路线
  • 洛谷 B4415:[GESP202509 四级] 排兵布阵 ← 暴力枚举法
  • 全球化仓储软件(WMS)哪家好?国内主流服务商盘点
  • sort自定义cmp
  • 846. 大学生HTML期末大作业 ―【响应式自适应个人博客网页(1页)】 Web前端网页制作 html5+css3 - 实践
  • 2025年集成安全继电器定制厂家权威推荐榜单:进口安全继电器/稳定的安全继电器/CE安全继电器源头厂家精选
  • 2025年11月国内PMS酒店管理系统公司排行榜TOP5:智能化转型首选指南
  • 2025 天冬树脂厂家最新推荐榜单:国际协会权威测评 + 多维度考核,优质品牌实力领衔行业防水/建筑涂料/聚脲/防腐/美缝剂天冬树脂公司推荐
  • 2025年国内PMS酒店管理系统公司权威推荐排行榜
  • AtCoder Beginner Contest 430
  • 2025 最新自动投篮机厂家推荐,智能自动投篮机源头厂家权威排行榜 便携可折叠 / 抛投式 / 分体式篮球训练器优质品牌精选
  • 2025 工业加热器厂家最新推荐排行榜:实力制造商深度解析,覆盖多场景加热设备优质解决方案
  • SQL Server 2025 正式版发布 - 从本地到云端的 AI 就绪企业数据库