2014-01-19 56 views
0

我想運行一個JavaScript,將頁面的背景顏色設置爲紅色,等待秒,然後從網頁獲取一個值,然後變綠,然後保持綠色幾秒鐘後再次變紅並無限期重複。使用setTimeout時防止在循環內重複GET

我正在使用JQuery GET來獲取網頁。

我的代碼

<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> 

問題:不知何故,seTimeout導致循環繼續。到頁面等待幾秒鐘時,會生成數百個GET請求。當代碼正在等待給定的時間時,我需要完整的過程來凍結。 我的瀏覽器正在檢測這個連續的循環,由於繁重的活動並要求殺死它。

請幫我解決這個問題。

+1

歡迎** **異步的奇妙世界!你不能那樣做。你需要遞歸。 – SLaks

+1

爲什麼使用'while(1)' – Satpal

+0

需要繼續這樣做直到頁面關閉 – BMC

回答

0

試試這個,

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

DEMO:http://jsfiddle.net/Hnuy8/

0

setTimeout不會凍結你的while函數,因爲它的異步。它會在給定時間後等待並執行g()

setInterval(function() { 
    $.get("http://localhost:8080/t.html", function(data){ 
    if(data=="green") g(); 
    else r(); 
    }); 
},10000); 

這將執行GET請求,每10秒,背景設置爲綠色,當data爲綠色,否則爲紅色。

我不完全理解你想達到什麼,所以你需要修改這一點。

+0

數據包含一個值,綠色需要保留那麼多秒 – BMC

+0

以及您想要何時再次觸發您的獲取請求?因爲如果你想在背景變紅之後立即觸發它,那麼你只會在請求時看到紅色的+你想等待'g()'的10000秒鐘(總共應該是10100ms),那是什麼你意思是? – bbuecherl

0

請看看

<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>