AJAX请求优化:50个串行请求,每5个后延迟10秒并弹窗
修正后的AJAX串行请求实现
以下是符合需求的修正代码,实现了串行发送50个AJAX请求、每完成5个延迟10秒、全部完成弹出提示的功能:
var requestCount = 50; // 总请求数 var delayAfter = 5; // 每完成N个请求后延迟 var delaySeconds = 10; // 延迟时长(秒) var requestCounter = 0; function makeRequest() { // 先判断是否已完成所有请求 if (requestCounter >= requestCount) { alert('所有请求已完成!'); return; } $.ajax({ url: "request.php?action=manualGroupMembers", success: function(response) { // 这里可处理请求成功后的逻辑 console.log('请求成功:', response); requestCounter++; // 判断是否需要延迟:完成的请求数是5的倍数,且还没到总请求数 if (requestCounter % delayAfter === 0 && requestCounter < requestCount) { setTimeout(makeRequest, delaySeconds * 1000); } else { // 不需要延迟则直接发起下一个请求 makeRequest(); } }, error: function(error) { // 请求失败的处理逻辑,这里选择终止后续请求并提示 console.error('请求失败:', error); alert('请求失败,已终止后续操作'); } }); } // 启动第一个请求 makeRequest();
关键修改说明
- 串行请求保证:把下一个请求的调用放在AJAX的
success回调中,只有当前请求成功返回后,才会触发下一个请求,彻底解决原代码并行发送的问题。 - 延迟逻辑修正:将触发延迟的条件改为
requestCounter % 5 === 0,同时设置延迟时长为10秒,符合需求中“每完成5个请求后延迟10秒”的要求。 - 完成提示添加:在函数开头判断计数器是否达到总请求数,满足条件时弹出提示框。
- 错误处理优化:请求失败时终止后续请求并给出提示,避免无效的重复尝试(如果需要重试逻辑,可在此处修改为重试次数判断后重新调用
makeRequest)。
内容的提问来源于stack exchange,提问作者egam321
相关产品推荐
相关产品推荐

