Microsoft Edge缓存Ajax请求?

时间:2016-04-05 19:38:38

标签: javascript ajax microsoft-edge

所以我有一个用于在网站上加载内容的ajax系统,它的工作原理如下:

单击按钮时,将调用Javascript函数:

onclick="doSomething('abc')"

我的Javascript看起来像这样:

//Ajax
var xmlhttp;
function loadXMLDoc(url,cfunc) {
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else {
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=cfunc;
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
}
function doSomething(var) {
    loadXMLDoc("http://www.website.com/ajax/doSomething.php?var="+var, function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("response-container").innerHTML=xmlhttp.responseText;
        }
    });
}

PHP文件只调用了echo这样的文本:

echo "Response here";

通常,每次运行此Javascript函数时,我都会使用这种类型的系统在具有特定id的元素中加载新内容。

这已经完美地工作了3年多,但由于某些原因,Microsoft Edge正在缓解这一反应。所以内容根本没有正确生成。所以你运行一次,并且在x时间内它将继续返回相同的缓存响应。

任何想法对此的正确解决方法是什么?我已经看到过使用标题的提及,但我不确定如何在这种情况下应用修复。

4 个答案:

答案 0 :(得分:7)

我们在Edge和IE 10/11上的缓存ajax请求也遇到了问题。我们的解决方案是使用HTTP-header Cache-Control: no-cache这也没有时间戳。

答案 1 :(得分:2)

是的,XMLHttpRequest没有任何内在意味着它不应该被缓存。浏览器就像其他HTTP请求一样对待它们。您可以完全控制浏览器使用HTTP标头缓存内容的方式。

答案 2 :(得分:1)

在IE或MS Edge中禁用缓存的最佳方法是执行此操作:

只需按f12,然后转到网络标签,找到工具栏中的第四个按钮,标题为:始终从服务器刷新。

每次都会发送请求,没有缓存.. enter image description here

答案 3 :(得分:0)

经过大量搜索和故障排除后,我终于找到了解决此问题的解决方案。添加标头Cache-Control:no-cache无效,实际上对我而言,排除了故障排除的可能性。我曾使用标头Pragma:no-cache来解决IE11中相同的AJAX缓存问题,但对于Edge仍然不起作用。并且Cache-Control标头针对Chrome和FF修复了该错误(针对http 1.1规范)。

由于Microsoft数据库中的缺陷,如果存在Cache-Control标头,则会忽略Pragma标头:

https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10739540/

因此,添加逻辑以仅对IE和Edge使用Pragma,而仅对符合HTTP 1.1的浏览器使用Cache-Control可以达到目的。