当JSON返回status为false时,函数无法重新执行的技术问题
问题分析与解决方案
你的代码逻辑存在核心问题:checkIfCompleted函数的作用是给按钮绑定点击事件,而非直接发起AJAX请求。当你在AJAX的success回调里递归调用checkIfCompleted()时,只是重复给按钮添加点击监听,并没有触发新的请求,自然无法实现"status为false时重试"的效果。
修正方案
拆分逻辑,把AJAX请求的逻辑单独抽成独立函数,让重试逻辑直接调用请求函数而非绑定事件的函数:
$(document).ready(function(){ // 单独封装AJAX请求逻辑 function fetchStatus() { var url = "https://localhost/check/1"; $.ajax({ url: url, success: function(response) { if(response.status === false){ // 加延迟避免频繁请求服务器,比如1秒后重试 setTimeout(fetchStatus, 1000); }else{ alert('done'); // 原代码中done未加引号会报错,此处修正 } }, // 增加error回调处理请求失败的情况 error: function() { console.log('请求失败,稍后重试'); setTimeout(fetchStatus, 2000); } }); } // 仅绑定一次点击事件 function checkIfCompleted(){ $('.btn').click( function(e) { e.preventDefault(); fetchStatus(); // 点击后发起第一次请求 }); } checkIfCompleted(); });
关键改进点
- 将AJAX请求逻辑从点击事件绑定中分离,让重试可以直接触发请求
- 添加
setTimeout避免短时间内频繁请求服务器,减轻服务端压力 - 修复原代码中
alert(done)的语法错误(未加引号会被当作未定义变量) - 增加error回调,处理请求失败时的重试逻辑
内容的提问来源于stack exchange,提问作者NG7
相关产品推荐
相关产品推荐

