首页 > 解决方案 > Javascript clearTimeout 帮助请

问题描述

大家好,这是我的代码:

var stopKick;
let timerID = setInterval(function() {
  // function kicked() { setTimeout( room.kickPlayer(player.id , " Lütfen hesabını onayla -> [ public.haxlife.com ] " , false) , 30000 ); clearInterval(timerID); }
  $.ajax({
    url: 'http://localhost/BOT/publicBOT/kesinOnay.php',
    type: 'POST',
    data: {
      nickname: nick
    },
    success: function(data) { // Kicklenme sorununda kaldın!
      console.log(data);
      if (data == 'dogrulanmamis') {
        stopKick = setTimeout(function() {
          console.log("denem")
        }, 30000)
      } else {
        clearTimeout(stopKick);
        room.sendChat("Profilin Eşleşti İyi Oyunlar , " + player.name, player.id);
        clearInterval(timerID);
      }
    },
    error: function() {
      console.log("eslesmede hataa");
    }
  });
}, 3000);

但是这个 clearTimeout 不起作用

标签: javascript

解决方案


问题是每次发生 AJAX 调用并且data == 'dogrulanmamis'是真的时,您都会创建一个新的计时器。当条件为假时,您只取消最后一个。

您应该只启动一次计时器,或者在启动新计时器之前取消旧计时器。这是第一种方法。

var stopKick;
let timerID = setInterval(function() {
  $.ajax({
    url: 'http://localhost/BOT/publicBOT/kesinOnay.php',
    type: 'POST',
    data: {
      nickname: nick
    },
    success: function(data) { // Kicklenme sorununda kaldın!
      console.log(data);
      if (data == 'dogrulanmamis') {
        if (!stopKick) {
          stopKick = setTimeout(function() {
            console.log("denem")
          }, 30000);
        }
      } else {
        clearTimeout(stopKick);
        room.sendChat("Profilin Eşleşti İyi Oyunlar , " + player.name, player.id);
        clearInterval(timerID);
      }
    },
    error: function() {
      console.log("eslesmede hataa");
    }
  });
}, 3000);

推荐阅读