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
相关产品推荐
相关产品推荐

