Javascript 在jQuery/JS中,如何在两个Ajax函数之间切换,每个函数中都有一个setTimeout?
我有两个Ajax函数,每个函数读取一组数字。这只是一个演示,因此假设语法正确并且所有数据加载正确。每个函数都有一个setTimeout,每2秒钟重新加载一次数据 我试图在两个功能之间切换,但切换时似乎无法阻止超时触发。两个超时同时触发 这是HTML文件-Javascript 在jQuery/JS中,如何在两个Ajax函数之间切换,每个函数中都有一个setTimeout?,javascript,jquery,ajax,function,settimeout,Javascript,Jquery,Ajax,Function,Settimeout,我有两个Ajax函数,每个函数读取一组数字。这只是一个演示,因此假设语法正确并且所有数据加载正确。每个函数都有一个setTimeout,每2秒钟重新加载一次数据 我试图在两个功能之间切换,但切换时似乎无法阻止超时触发。两个超时同时触发 这是HTML文件- <button class="btn low-btn">Get Low Numbers</button> <button class="btn high-btn">Ge
<button class="btn low-btn">Get Low Numbers</button>
<button class="btn high-btn">Get High Numbers</button>
<div class="numbers"></div>
<script src="data.js"></script>
获取较低的数字
获得高数字
这是data.js文件-
$(document).ready(function(){
var timeout_high;
var timeout_low;
function low() {
$.ajax('get-low.php', {
success: function (data) {
$(".numbers").replaceWith("<div class='numbers'>Low Numbers: "+data+"</div>");
var timeout_low = setTimeout(low, 2000);
}
});
}
function high() {
$.ajax('get-high.php', {
success: function (data) {
$(".numbers").replaceWith("<div class='numbers'>High Numbers: "+data+"</div>");
var timeout_high = setTimeout(high, 2000);
}
});
}
$(".low-btn").click(function(){
clearTimeout(timeout_high);
low();
});
$(".high-btn").click(function(){
clearTimeout(timeout_low);
high();
});
});
$(文档).ready(函数(){
var超高;
var超时u低;
函数低(){
$.ajax('get-low.php'{
成功:功能(数据){
$(“.numbers”).replace为(“小写:“+data+”);
var timeout_low=设置超时(低,2000);
}
});
}
函数高(){
$.ajax('get-high.php'{
成功:功能(数据){
$(“.numbers”).replace为(“高位数字:“+data+”);
var timeout_high=setTimeout(高,2000);
}
});
}
$(“.low btn”)。单击(函数(){
clearTimeout(超时\u高);
低();
});
$(“.high btn”)。单击(函数(){
clearTimeout(超时值低);
高();
});
});
我尝试在点击一个按钮后使用clearTimeout,但它不会终止超时,但这两个函数都会继续启动。如果我一直单击它,它只会不断添加更多超时。下面两行:
var timeout_low = setTimeout(low, 2000);
var timeout_high = setTimeout(high, 2000);
。。。不要将新值分配给在$(文档)开头定义的变量。ready
函数创建新值,并在相应函数的本地创建新值。因此,ClearTimeout实际上什么都不做——它们在ajax:success处理程序之外运行,只看到“外部”变量
(是的,clearTimeout(未定义)
既不抛出也不发出警告)
最简单的解决方案是从这些语句中删除var
:
timeout_low = setTimeout(low, 2000);
timeout_high = setTimeout(high, 2000);
<>当然,我会强烈考虑把这些函数合并成一个函数,使用某种字典,把数据获取器和它们的结果显示在一起。关于将其包装到主函数中的好主意