Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jQuery/JS中,如何在两个Ajax函数之间切换,每个函数中都有一个setTimeout?_Javascript_Jquery_Ajax_Function_Settimeout - Fatal编程技术网

Javascript 在jQuery/JS中,如何在两个Ajax函数之间切换,每个函数中都有一个setTimeout?

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

我有两个Ajax函数,每个函数读取一组数字。这只是一个演示,因此假设语法正确并且所有数据加载正确。每个函数都有一个setTimeout,每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();
    });

});
$(文档).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);

<>当然,我会强烈考虑把这些函数合并成一个函数,使用某种字典,把数据获取器和它们的结果显示在一起。关于将其包装到主函数中的好主意