clearInterval()无法正常工作

我最近一直试图每两秒重复一次jQuery AJAX请求。 请注意:我已经查看了SO上的其他问题而不是它们似乎适用于我的情况,我也查看了文档。

片段:

else if (text == "load") { $(".response").text("working!"); var traffic = function load() { $.ajax({url:"load.php",success:function(result){ var obj = jQuery.parseJSON(result); var ids = obj.map(function(el) { return "" + el.id + "" + el.ip + "" + el.proxyip + "" + el.ping + "" + el.time + ""; }); $(".response").html("" + ids + "
IDIPsProxy IPPingTime
"); }}); }; var trafficInterval = setInterval(traffic, 2000);

为了确定超时,我检查文本是否不等于“加载”,如果它不等于加载,我会超时

 else { $(".response").text("'" + badCommand + "'" +" is not a valid command, type 'help' for a list of commands."); clearInterval(trafficInterval); } 

但是,当我更改文本字段的输入时,表仍将每两秒加载一次,超时尚未被清除,我似乎无法理解为什么。

这是人们想知道的整个function

 $("textarea").keyup(function(){ var text = $(this).val(); $(".log").text(text); // Commands if (text != "") { var badCommand = $("textarea").val(); if (text == "help") { $(".response").html("Commands:
traffic -url|allgoogle #search termyoutube #search termportfolio") } else if (text == "traffic") { $(".response").html('Live traffic from:
query($sql) as $row) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } $db = null; } catch(PDOException $e) { $e->getMessage(); } ?>
IPProxy IPPingTime
" . $row["ip"] . "" . $row["proxyip"] . "" . $row["ping"] . "" . $row["time"] . "
'); } else if (text == "load") { $(".response").text("working!"); var traffic = function load() { $.ajax({url:"load.php",success:function(result){ var obj = jQuery.parseJSON(result); var ids = obj.map(function(el) { return "" + el.id + "" + el.ip + "" + el.proxyip + "" + el.ping + "" + el.time + ""; }); $(".response").html("" + ids + "
IDIPsProxy IPPingTime
"); }}); }; var trafficInterval = setInterval(traffic, 2000); } else { $(".response").text("'" + badCommand + "'" +" is not a valid command, type 'help' for a list of commands."); clearInterval(trafficInterval); } } if (text == "") { var noCommand = $("textarea").val(); $(".response").text(" "); } // End Commands

});

供参考:

把clearInterval(); 代码停止工作后,
把clearInterval(); 在代码什么也没做之前。

clearInterval(trafficInterval); 必须工作,因为如果我把它放在第一个函数的末尾,当我输入“load”时没有任何反应

它也不是计时器,我试着改为每当鼠标移动时自动更新并发生完全相同的事情……

这是一个范围问题。 间隔需要超出事件处理程序调用的范围:

 var trafficInterval = null; $("textarea").keyup(function(){ var text = $(this).val(); $(".log").text(text); // Commands if (text != "") { var badCommand = $("textarea").val(); if (text == "help") { $(".response").html("Commands:
traffic -url|allgoogle #search termyoutube #search termportfolio") } else if (text == "traffic") { $(".response").html(''); } else if (text == "load") { $(".response").text("working!"); var traffic = function load() { $.ajax({url:"load.php",success:function(result){ var obj = jQuery.parseJSON(result); var ids = obj.map(function(el) { return "" + el.id + "" + el.ip + "" + el.proxyip + "" + el.ping + "" + el.time + ""; }); $(".response").html("" + ids + "
IDIPsProxy IPPingTime
"); }}); }; trafficInterval = setInterval(traffic, 2000); } else { $(".response").text("'" + badCommand + "'" +" is not a valid command, type 'help' for a list of commands."); clearInterval(trafficInterval); } } if (text == "") { var noCommand = $("textarea").val(); $(".response").text(" "); } // End Commands });

请参阅fiddle @ http://jsfiddle.net/sLooj4on/ (可以看到开发工具中的轮询失败,从输入中删除文本时停止)

在不查看其余代码的情况下很难分辨,但您的trafficInterval变量可能超出范围。 尝试在if / else语句之外初始化

trafficInterval仅在if语句中定义。 你试图在错误的范围内清除它。 我仍然缺少一些上下文,但你可以试试这个:

 var trafficInterval; $("textarea").keyup(function() { var text = $(this).val(); $(".log").text(text); // Commands if (text != "") { var badCommand = $("textarea").val(); if (text == "help") { $(".response").html("Commands:
traffic -url|allgoogle #search termyoutube #search termportfolio") } else if (text == "traffic") { $(".response").html('Live traffic from:
query($sql) as $row) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } $db = null; } catch(PDOException $e) { $e->getMessage(); } ?>
IPProxy IPPingTime
" . $row["ip"] . "" . $row["proxyip"] . "" . $row["ping"] . "" . $row["time"] . "
'); } else if (text == "load") { $(".response").text("working!"); var traffic = function load() { $.ajax({ url: "load.php", success: function(result) { var obj = jQuery.parseJSON(result); var ids = obj.map(function(el) { return "" + el.id + "" + el.ip + "" + el.proxyip + "" + el.ping + "" + el.time + ""; }); $(".response").html("" + ids + "
IDIPsProxy IPPingTime
"); } }); }; trafficInterval = setInterval(traffic, 2000); } else { $(".response").text("'" + badCommand + "'" + " is not a valid command, type 'help' for a list of commands."); clearInterval(trafficInterval); } } if (text == "") { var noCommand = $("textarea").val(); $(".response").text(" "); } // End Commands

移动变量声明

 var trafficInterval = null; 

在keyup eventhandler之前(将其移动到外部范围)。 看到工作,在这里剥离示例:

http://jsbin.com/yitiquwoce/1/