You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:35:23