Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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刷新函数问题_Javascript_Unix - Fatal编程技术网

Javascript刷新函数问题

Javascript刷新函数问题,javascript,unix,Javascript,Unix,我对下面的javascript代码有问题。 基本上,我想在Unix服务器上运行一个进程的后台检查(check.php)。php和响应的执行时间约为1.2-1.5秒(在Mozilla中进行了测试),因此我想出了下面的脚本来刷新和检查该过程的执行情况,并相应地更改DIV的背景。 现在,在几次刷新之后,它就挂起了,因为我认为它进入了一个循环,它没有等待第一个函数完成,它只是堆积起来。 知道我做错了什么吗?有更简单的方法吗 <script language="javascript" type="t

我对下面的javascript代码有问题。 基本上,我想在Unix服务器上运行一个进程的后台检查(check.php)。php和响应的执行时间约为1.2-1.5秒(在Mozilla中进行了测试),因此我想出了下面的脚本来刷新和检查该过程的执行情况,并相应地更改DIV的背景。 现在,在几次刷新之后,它就挂起了,因为我认为它进入了一个循环,它没有等待第一个函数完成,它只是堆积起来。 知道我做错了什么吗?有更简单的方法吗

<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()未定义,