如何在 jQuery / JS 的每个函数中使用 setTimeout 在 2 个 Ajax 函数之间切换?
How can I switch between 2 Ajax functions with a setTimeout in each function in jQuery / JS?
我有 2 个 Ajax 函数,每个函数读取一组数字。这只是一个演示,因此假设语法正确且所有数据加载正确。每个函数都有一个 setTimeout,每 2 秒重新加载一次数据。
我正在尝试在我可以执行的 2 个功能之间切换,但我似乎无法在切换时停止触发超时。两个超时同时触发。
这是 HTML 文件 -
<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();
});
});
我尝试在单击按钮后使用 clearTimeout,但它不会终止超时,但两个函数都会继续触发。如果我一直点击它只会不断添加更多超时。
下面两行:
var timeout_low = setTimeout(low, 2000);
var timeout_high = setTimeout(high, 2000);
... 而不是将新值分配给在 $(document).ready
函数开头定义的变量,创建 新变量 ,局部于相应的函数。因此 clearTimeouts 实际上什么都不做 - 它们 运行 在 ajax:success 处理程序之外,并且只看到 'outer' 变量。
(是的,clearTimeout(undefined)
既不抛出也不警告)
最简单的解决方案是从这些语句中删除 var
:
timeout_low = setTimeout(low, 2000);
timeout_high = setTimeout(high, 2000);
不过,我强烈考虑将这些函数合并为一个函数,使用某种字典,将数据获取器和结果应显示在其中的元素捆绑在一起。
我有 2 个 Ajax 函数,每个函数读取一组数字。这只是一个演示,因此假设语法正确且所有数据加载正确。每个函数都有一个 setTimeout,每 2 秒重新加载一次数据。
我正在尝试在我可以执行的 2 个功能之间切换,但我似乎无法在切换时停止触发超时。两个超时同时触发。
这是 HTML 文件 -
<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();
});
});
我尝试在单击按钮后使用 clearTimeout,但它不会终止超时,但两个函数都会继续触发。如果我一直点击它只会不断添加更多超时。
下面两行:
var timeout_low = setTimeout(low, 2000);
var timeout_high = setTimeout(high, 2000);
... 而不是将新值分配给在 $(document).ready
函数开头定义的变量,创建 新变量 ,局部于相应的函数。因此 clearTimeouts 实际上什么都不做 - 它们 运行 在 ajax:success 处理程序之外,并且只看到 'outer' 变量。
(是的,clearTimeout(undefined)
既不抛出也不警告)
最简单的解决方案是从这些语句中删除 var
:
timeout_low = setTimeout(low, 2000);
timeout_high = setTimeout(high, 2000);
不过,我强烈考虑将这些函数合并为一个函数,使用某种字典,将数据获取器和结果应显示在其中的元素捆绑在一起。