2016-04-05 169 views
2

所以我有一个网站上载内容的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; 
     } 
    }); 
} 

就称为Echo的文字有点像这样的PHP文件:

echo "Response here"; 

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

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

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

+2

你试过添加时间戳的查询字符串参数?我用它来强制CSS文件不被缓存。即''var =“+ var +”&ts =“+ Date.now()' – Quantastical

+0

缓存ajax请求是一个常见问题,浏览器往往会越来越积极地缓存,带有时间戳值的附加请求参数是一个常用的解决方法 –

回答

7

我们在边缘和IE 10/11上也发现了缓存的ajax请求问题。我们的解决方案是使用HTTP-headerCache-Control: no-cache这也没有时间戳。

1

的最佳方式在IE中禁用缓存或MS Edge是做到这一点:

只需按下F12键,然后转到网络选项卡,找到第四此标题的工具框中的按钮:始终从服务器刷新。

将每次发送的请求没有缓存.. enter image description here

+0

这个答案对于这个上下文没有什么帮助,他们问如何让他们的web应用程序的所有用户都可以使用这个工作,要求每个用户都改变他们的浏览器设置通常是不可行的。 – Keith