Javascript 使用setTimeout时防止重复进入循环
我正在尝试运行一个javascript,将页面的背景颜色设置为红色,等待几秒钟,然后从网页中获取一个值,然后变为绿色,然后保持绿色数秒,然后再次变为红色并无限期重复 我使用JQuery获取网页 我的代码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
<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毫秒)期间看到红色的一个,这是你的意思吗?