这个问题不关于IE缓存XHR调用,我已经解决了缓存问题,并从XHR调用中得到了正确的结果(即已更改)。但是:在我的XHR响应(即HTML)中,不仅更改了HTML,而且更改了HTML引用的图像。当HTML正确更改时,只有在我完全刷新页面时,此图像才会更改。
因此,XHR调用本身不会被缓存,但链接的资源似乎会被缓存。这意味着任何专注于XHR调用的解决方案都不起作用(例如向URL添加额外参数或设置标头)。似乎浏览器(我已经尝试过Safari和Firefox)决定使用它们的缓存来帮助XHR调用其链接资源。实际上,开发工具只显示XHR的传输,而没有其他文件。
如何强制浏览器正确加载(请求)XHR调用中的图像?
我正在使用PHP服务器端(也是服务标头)和MooTools来处理XHR调用。脚本永远不会被缓存,图像会检查“if-modified”标题(虽然我也尝试过不会缓存这些标题)。
答案 0 :(得分:1)
您可以在响应中运行此JavaScript代码...
var container = document.createElement('div'),
date = +new Date;
container.innerHTML = htmlReturnedFromXHR;
[].forEach.call(container.querySelectorAll('img[src]'), function(img) {
img.src += '?' + date;
});
或者,如果您必须支持旧版浏览器,请用...替换上面的循环
var img = container.getElementsByTagName('img');
for (i = 0, length = img.length; i < length; i++) {
img[i].src += '?' + date;
}
执行上述操作的MooTools代码:
var container = document.createElement('div'),
date = +new Date
imgs = container.getElements('img');
imgs.each(function(img) {
img.src = img.src + '?' + date;
}