Javascript 使用setTimeout时防止重复进入循环

Javascript 使用setTimeout时防止重复进入循环,javascript,jquery,get,settimeout,Javascript,Jquery,Get,Settimeout,我正在尝试运行一个javascript,将页面的背景颜色设置为红色,等待几秒钟,然后从网页中获取一个值,然后变为绿色,然后保持绿色数秒,然后再次变为红色并无限期重复 我使用JQuery获取网页 我的代码 <script> function g() { document.body.bgColor = 'green'; } function r() { document.body.bgColor = 'red

我正在尝试运行一个javascript,将页面的背景颜色设置为红色,等待几秒钟,然后从网页中获取一个值,然后变为绿色,然后保持绿色数秒,然后再次变为红色并无限期重复

我使用JQuery获取网页

我的代码

<script>
        function g() {
            document.body.bgColor = 'green';
        }
function r() {
            document.body.bgColor = 'red';
        }


 $(document).ready(function(){

     while(1)
     {
    $.get("http://localhost:8080/t.html", function( data ){
        setTimeout'g()',10000);

        setTimeout('r()',data*1000);

        });



     }

 });
    </script>

函数g(){
document.body.bgColor='绿色';
}
函数r(){
document.body.bgColor='red';
}
$(文档).ready(函数(){
而(1)
{
$.get(”http://localhost:8080/t.html,函数(数据){
设置超时“g()”,10000);
setTimeout('r()',数据*1000);
});
}
});
问题:不知何故,seTimeout导致循环继续。当页面等待几秒钟时,会生成数百个GET请求。我需要在代码等待给定时间时冻结整个过程。 我的浏览器检测到由于频繁活动而导致的连续循环,并要求终止它


请帮我解决这个问题。

设置超时不会冻结while函数,因为它是异步的。它只需等待并在给定时间后执行
g()

setInterval(function() {
    $.get("http://localhost:8080/t.html", function( data ){
     if(data=="green") g(); 
     else r();
    });
},10000);
这将每10秒执行一次GET请求,并在
data
为绿色时将背景设置为绿色,否则设置为红色

我不完全理解您想要实现的目标,因此您需要对此进行一些修改。

请看一看

 <script>
            function g() {
                document.body.bgColor = 'green';
            }
            function r() {
                document.body.bgColor = 'red';
            }


     $(document).ready(function(){

        function changeBG()
        {
         $.get("http://localhost:8080/t.html", function( data )
         {
               setTimeout('g()',10000);
               setTimeout('r()',data*1000);
               changeBG();
         });

        }
     changeBG();
     });

     </script>

函数g(){
document.body.bgColor='绿色';
}
函数r(){
document.body.bgColor='red';
}
$(文档).ready(函数(){
函数changeBG()
{
$.get(”http://localhost:8080/t.html,函数(数据)
{
setTimeout('g()',10000);
setTimeout('r()',数据*1000);
changeBG();
});
}
changeBG();
});
试试这个

$(function(){
  r();
});
function r(){    
    var timeOut = 5000;
    if(document.body.bgColor=='green'){
         document.body.bgColor = 'red';
           timeOut = 10000;
    }else{
        document.body.bgColor = 'green';        
    }    
    setTimeout(r,timeOut);
}

演示:

欢迎来到精彩的异步世界!你不能那样做。您需要递归。为什么要使用
,而(1)
需要一直这样做,直到页面关闭数据包含一个值,绿色需要保留那么多秒,何时再次触发get请求?因为如果你想在背景变成红色后立即触发它,那么你只会在请求+你想要等待的10000秒(总共10100毫秒)期间看到红色的一个,这是你的意思吗?