防止在XHR调用中缓存链接的资源

时间:2012-04-20 10:40:31

标签: php ajax caching http-headers mootools

这个问题关于IE缓存XHR调用,我已经解决了缓存问题,并从XHR调用中得到了正确的结果(即已更改)。但是:在我的XHR响应(即HTML)中,不仅更改了HTML,而且更改了HTML引用的图像。当HTML正确更改时,只有在我完全刷新页面时,此图像才会更改。

因此,XHR调用本身不会被缓存,但链接的资源似乎会被缓存。这意味着任何专注于XHR调用的解决方案都不起作用(例如向URL添加额外参数或设置标头)。似乎浏览器(我已经尝试过Safari和Firefox)决定使用它们的缓存来帮助XHR调用其链接资源。实际上,开发工具只显示XHR的传输,而没有其他文件。

如何强制浏览器正确加载(请求)XHR调用中的图像?

我正在使用PHP服务器端(也是服务标头)和MooTools来处理XHR调用。脚本永远不会被缓存,图像会检查“if-modified”标题(虽然我也尝试过不会缓存这些标题)。

1 个答案:

答案 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;
}