0

我有一个网页用作txt在 Unix 上更新的文件的实时日志。我正在向 PHP 文件发送 Ajax 请求,该文件读取文件并将其文本返回到textarea.

我希望textarea每 1 秒更新一次。

javascript代码是:

<script>

    var myVar;

    function readLogAjax()
    {
        var account = document.getElementById("account").value;
        var env = document.getElementById("env").value;
        var type = document.getElementById("type").value;

        var xmlhttp;
        if (window.XMLHttpRequest)
        {
            xmlhttp=new XMLHttpRequest();
        }
        else
        {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                document.getElementById("result").value = xmlhttp.responseText;
                console.log('Updated textarea');
            }
        }
        xmlhttp.open("GET","ajax_file_reader.php?account="+account+"&env="+env+"&type="+type ,true);
        console.log('Sending request');
        xmlhttp.send();
        console.log('Sent request');
    }

    function startRead()
    {
        myVar = setInterval(readLogAjax,1000);
    }

    function stopRead()
    {
        clearInterval(myVar);
    }

</script>

textarea:_

<textarea  style="margin: 2px; height: 335px; width: 661px;" name="result" id="result" cols="80" rows="10" onclick=""></textarea>

我有两个按钮来启动和停止日志:

<button type="button" id="generate"  onclick="startRead()">Run EVT</button>
<button type="button" id="generate"  onclick="stopRead()">Stop EVT</button>

这个简单的代码在 Chrome 上运行良好,并且textare每隔一秒更新一次,我可以在 Chrome 的网络监视器中看到 Ajax 调用:

网络监视器 但是在 IE8 上(我必须在 IE8 上运行),textarea只有在我第一次进入页面并按下Run EVT后才会更新。

我认为这是一个缓存问题,所以我添加了这些元标记:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

但这没有帮助,所以我猜这是 AJAX 调用的某种问题,我添加了控制台调用,我在 IE8 控制台上看到了这些结果:

...
...
LOG: Sending request
LOG: Sent request
LOG: Updated textarea
LOG: Sending request
LOG: Sent request
LOG: Updated textarea
...
...

我还尝试了一些修改,setInterval例如setInterval("readLogAjax();",1000);setInterval(function(){readLogAjax()},1000);。但这没有帮助

我不知道IE8的问题是什么...

4

1 回答 1

0

OK,终于找到谜底的答案了……

IE8 还缓存了正在读取文本 ( ajax_file_reader.php) 的 PHP 文件,因此显示的唯一文本是收到的第一个文本,并且从那以后它被缓存了。

解决方案是将这些标头添加到 PHP 代码中:

header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header('Expires: 0'); // Proxies.

感谢GolezTrolCBroe让我专注于缓存问题。

于 2013-11-10T21:32:34.630 回答