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

jQuery实现AJAX成功后计数自增功能返回NaN如何修复

问题根因

你的代码出现NaN的核心问题有4个:

  • 变量作用域错误:nowp 是函数内部用var声明的局部变量,每次调用loadedt都会重新创建,之前的运行值根本无法保存
  • 初始化逻辑完全写反:现有判断逻辑是「如果nowp已存在且不为空」就重置为初始值21,反而「nowp不存在」的时候尝试执行自增或结束判断,完全不符合需求
  • var变量提升的坑:你在if/else分支里用var声明nowp,声明会被提升到函数顶部,第一次调用函数判断typeof(nowp)时,由于变量提升返回undefined,直接进入else分支对未赋值的nowp执行自增操作,自然得到NaN
  • 结束判断逻辑位置错误:结束判断写在了nowp未定义的分支里,永远无法触发结束逻辑
修复后的代码
// 将nowp提到函数外,作为全局变量保存运行状态,避免每次调用函数被重置
var nowp;
var from = 21;
var till = 1346;

function loadedt() {
    // 初始化逻辑:第一次调用时nowp为undefined,设置初始值为21
    if(typeof nowp === "undefined" || nowp === null) {
        nowp = Math.ceil(from);
    }

    // 结束判断:如果已经到最大值,设置为finish
    if(nowp > till) {
        nowp = 'finish';
    }
    
    console.log(nowp);
    
    $('#uitslag').html('Wait a minute..');
    $.ajax({
        type: 'GET',
        url: '<?php echo $website["adres"]; ?>/get/pet.php', 
        data: { 
            pa : nowp
        },
        success: function(data) {
            if(nowp === 'finish') {
                $('#uitslag').fadeOut(500, function() {
                    $('#uitslag').html('yes '+nowp+' and '+data).fadeIn(500).delay(500);
                });
            } else {
                $('#uitslag').fadeOut(500, function() {
                    $('#uitslag').html('page '+nowp+' and '+data).fadeIn(4000, function() {
                        // 请求成功后再自增,准备下一次请求
                        nowp++;
                        loadedt();
                    }).delay(3000);
                });
            }
        }
    });
}
$(document).ready(loadedt);
改动说明
  • 把nowp、from、till三个变量提到函数外部,作为全局变量存储运行状态,避免每次调用函数被重置
  • 修正初始化逻辑,只有nowp未定义的第一次运行时才赋值初始值21
  • 把结束判断逻辑放到外层,每次运行都先判断是否已经超过最大值
  • 把自增逻辑放到请求成功的回调里,确保只有当前页面请求完成才计数+1,避免计数混乱

内容的提问来源于stack exchange,提问作者Ferdi R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:45:05