为什么setTimeout没有'我不在IE上工作

Why setTimeout doesn't work on IE

本文关键字:IE 工作 setTimeout 没有 为什么      更新时间:2023-09-26

一个非常简单的网页,里面有一个空的div:

<div id="joblist">
</div>
<script type="text/javascript">
    readJobList();
</script>

和javascript:

function handleReadJobList(text) {
    var e = document.getElementById("joblist");
    e.innerHTML = text;
    setTimeout(function(){readJobList();}, 1000);
}
function readJobList() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (xhttp.readyState == 4 && xhttp.status == 200) {
            handleReadJobList(xhttp.responseText);
        }
    }
    xhttp.open("GET", "joblist.ajax", true);
    xhttp.send();
}

当浏览器加载页面时,将调用readJobList第一次,它发送一个HTTP请求。handleReadJobList将读取响应文本,更新div的内容,并使用setTimeout一秒钟后调用readJobList。这是一个循环,尽管它是异步的。

此代码在Firefox、Chrome和Opera上运行良好。但在IE11上不起作用。我不知道为什么。仅div的内容更新了一次。它将不再更新。

如何修复?

如果AJAX适用于除IE之外的所有浏览器,那么这可能是因为IE正在缓存结果。您可以使用破坏缓存的随机查询参数(如Phil所建议的),或者更好地发送正确的头部来告诉IE(和所有其他浏览器)不要缓存AJAX响应。

关于覆盖所有主要浏览器的已知工作标题集,请参阅以下答案:如何在所有浏览器中控制网页缓存?