Javascript刷新函数问题
我对下面的javascript代码有问题。 基本上,我想在Unix服务器上运行一个进程的后台检查(check.php)。php和响应的执行时间约为1.2-1.5秒(在Mozilla中进行了测试),因此我想出了下面的脚本来刷新和检查该过程的执行情况,并相应地更改DIV的背景。 现在,在几次刷新之后,它就挂起了,因为我认为它进入了一个循环,它没有等待第一个函数完成,它只是堆积起来。 知道我做错了什么吗?有更简单的方法吗Javascript刷新函数问题,javascript,unix,Javascript,Unix,我对下面的javascript代码有问题。 基本上,我想在Unix服务器上运行一个进程的后台检查(check.php)。php和响应的执行时间约为1.2-1.5秒(在Mozilla中进行了测试),因此我想出了下面的脚本来刷新和检查该过程的执行情况,并相应地更改DIV的背景。 现在,在几次刷新之后,它就挂起了,因为我认为它进入了一个循环,它没有等待第一个函数完成,它只是堆积起来。 知道我做错了什么吗?有更简单的方法吗 <script language="javascript" type="t
<script language="javascript" type="text/javascript">
function getVal(param)
{
var strURL = param;
var req = new XMLHttpRequest();
req.open("GET", strURL, false); //third parameter is set to false here
req.send(null);
return req.responseText;
}
function changeDivImage()
{
var pid = getVal("check.php")
var imgPath = new String();
imgPath = document.getElementById("status_body").style.backgroundImage;
if(pid == 2)
{
document.getElementById("status_body").style.backgroundImage = "url(active.png)";
}
else
{
document.getElementById("status_body").style.backgroundImage = "url(down.png)";
}
changetimer();
}
function changetimer()
{
setInterval( "changeDivImage()", 5000 );
}
</script>
函数getVal(param)
{
var strURL=参数;
var req=新的XMLHttpRequest();
req.open(“GET”,strURL,false);//第三个参数在这里设置为false
请求发送(空);
返回请求响应文本;
}
函数changeDivImage()
{
var pid=getVal(“check.php”)
var imgPath=新字符串();
imgPath=document.getElementById(“状态\正文”).style.backgroundImage;
如果(pid==2)
{
document.getElementById(“status_body”).style.backgroundImage=“url(active.png)”;
}
其他的
{
document.getElementById(“status_body”).style.backgroundImage=“url(down.png)”;
}
changetimer();
}
函数changetimer()
{
setInterval(“changeDivImage()”,5000);
}
根据MDC,函数
使用
每次呼叫之间的固定时间延迟
这个功能
由于您在changeDivImage
函数末尾调用changetimer
函数,因此每次调用changetimer
时,它都会创建一个新的计时器,而不会删除旧的计时器。我建议取消对changeDivImage
函数末尾的changetimer
函数的调用。根据MDC,该函数
使用
每次呼叫之间的固定时间延迟
这个功能
由于您在
changeDivImage
函数末尾调用changetimer
函数,因此每次调用changetimer
时,它都会创建一个新的计时器,而不会删除旧的计时器。我建议取消对changeDivImage
函数末尾的changetimer
函数的调用。setInterval将不断反复调用该函数,因此在changeDivImage
返回后再次调用changetimer
函数将堆积越来越多不需要的函数。试试这个:
<script language="javascript" type="text/javascript">
function getVal(param)
{
var strURL = param;
var req = new XMLHttpRequest();
req.open("GET", strURL, false); //third parameter is set to false here
req.send(null);
return req.responseText;
}
//this function calls it self automatically and again everytime
//but only when it finishes its operations.
(function changeDivImage()
{
var pid = getVal("check.php")
var imgPath = new String();
imgPath = document.getElementById("status_body").style.backgroundImage;
if(pid == 2)
{
document.getElementById("status_body").style.backgroundImage = "url(active.png)";
}
else
{
document.getElementById("status_body").style.backgroundImage = "url(down.png)";
}
setTimeout(changeDivImage, 5000);
})();
函数getVal(param)
{
var strURL=参数;
var req=新的XMLHttpRequest();
req.open(“GET”,strURL,false);//第三个参数在这里设置为false
请求发送(空);
返回请求响应文本;
}
//此函数会自动调用self,每次都会再次调用
//但只有当它完成操作时。
(函数changeDivImage()
{
var pid=getVal(“check.php”)
var imgPath=新字符串();
imgPath=document.getElementById(“状态\正文”).style.backgroundImage;
如果(pid==2)
{
document.getElementById(“status_body”).style.backgroundImage=“url(active.png)”;
}
其他的
{
document.getElementById(“status_body”).style.backgroundImage=“url(down.png)”;
}
设置超时(changeDivImage,5000);
})();
setInterval将不断反复调用函数,因此在
changeDivImage
返回后再次调用changetimer
函数将堆积越来越多不需要的函数。试试这个:
<script language="javascript" type="text/javascript">
function getVal(param)
{
var strURL = param;
var req = new XMLHttpRequest();
req.open("GET", strURL, false); //third parameter is set to false here
req.send(null);
return req.responseText;
}
//this function calls it self automatically and again everytime
//but only when it finishes its operations.
(function changeDivImage()
{
var pid = getVal("check.php")
var imgPath = new String();
imgPath = document.getElementById("status_body").style.backgroundImage;
if(pid == 2)
{
document.getElementById("status_body").style.backgroundImage = "url(active.png)";
}
else
{
document.getElementById("status_body").style.backgroundImage = "url(down.png)";
}
setTimeout(changeDivImage, 5000);
})();
函数getVal(param)
{
var strURL=参数;
var req=新的XMLHttpRequest();
req.open(“GET”,strURL,false);//第三个参数在这里设置为false
请求发送(空);
返回请求响应文本;
}
//此函数会自动调用self,每次都会再次调用
//但只有当它完成操作时。
(函数changeDivImage()
{
var pid=getVal(“check.php”)
var imgPath=新字符串();
imgPath=document.getElementById(“状态\正文”).style.backgroundImage;
如果(pid==2)
{
document.getElementById(“status_body”).style.backgroundImage=“url(active.png)”;
}
其他的
{
document.getElementById(“status_body”).style.backgroundImage=“url(down.png)”;
}
设置超时(changeDivImage,5000);
})();
不要使用同步XHR。这绝不是你想要的,而且在某些情况下,你几乎肯定会挂起用户的浏览器。此外,不要使用setInterval。使用setTimeout,下次请求返回时,再执行一次setTimeout。这样,您就不会堆积一堆请求(并得到LIFO类型的问题),也不会使用同步XHR。这绝不是你想要的,而且在某些情况下,你几乎肯定会挂起用户的浏览器。此外,不要使用setInterval。使用setTimeout,下次请求返回时,再执行一次setTimeout。这样,您就不会堆积一堆请求(并得到后进先出类型的问题)。为什么不调用
setTimeout(changeDivImage,5000)代码>相反?谢谢你的回复,我昨天确实尝试了你的代码,但是没有用。Firebug说changeDivImage()是未定义的,所以我必须删除最后的括号才能使其正常工作。现在我没有发现javascript代码有任何错误,但是我需要减少check.php的执行时间。我一做对就发一些东西。为什么不调用setTimeout(changeDivImage,5000)代码>相反?谢谢你的回复,我昨天确实尝试了你的代码,但是没有用。Firebug说changeDivImage()未定义,