所以我有一个用于在网站上加载内容的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时间内它将继续返回相同的缓存响应。
任何想法对此的正确解决方法是什么?我已经看到过使用标题的提及,但我不确定如何在这种情况下应用修复。
答案 0 :(得分:7)
我们在Edge和IE 10/11上的缓存ajax请求也遇到了问题。我们的解决方案是使用HTTP-header Cache-Control: no-cache
这也没有时间戳。
答案 1 :(得分:2)
是的,XMLHttpRequest没有任何内在意味着它不应该被缓存。浏览器就像其他HTTP请求一样对待它们。您可以完全控制浏览器使用HTTP标头缓存内容的方式。
答案 2 :(得分:1)
答案 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可以达到目的。