当使用AJAX而不使用缓存破坏查询字符串,但使用http响应头时,清除IE缓存
我用的是经典的IE缓存Ajax问题中的所有内容。我有一些每分钟都会刷新的数据 经过对论坛的研究,解决方案归结为以下几个选项(http://stackoverflow.com/questions/5997857/grails-best-way-to-send-cache-headers-with-every-ajax-call):当使用AJAX而不使用缓存破坏查询字符串,但使用http响应头时,清除IE缓存,ajax,internet-explorer,caching,http-headers,browser-cache,Ajax,Internet Explorer,Caching,Http Headers,Browser Cache,我用的是经典的IE缓存Ajax问题中的所有内容。我有一些每分钟都会刷新的数据 经过对论坛的研究,解决方案归结为以下几个选项(http://stackoverflow.com/questions/5997857/grails-best-way-to-send-cache-headers-with-every-ajax-call): 向查询字符串添加一个缓存破坏令牌(比如?time=[timestamp]) 发送明确禁止IE缓存请求的HTTP响应头 使用ajax POST而不是GET 不幸的是,
- 向查询字符串添加一个缓存破坏令牌(比如?time=[timestamp])
- 发送明确禁止IE缓存请求的HTTP响应头
- 使用ajax POST而不是GET
(function ($) {
var timer = 0;
var Browser = {
Version: function () {
var version = 999;
if (navigator.appVersion.indexOf("MSIE") != -1) version = parseFloat(navigator.appVersion.split("MSIE")[1]);
return version;
}
}
$.fn.serviceboard = function (options) {
var settings = { "refresh": 60};
return this.each(function () {
if (options) $.extend(settings, options);
var obj = $(this);
GetLatesData(obj, settings.refresh);
if (settings.refresh > 9 && Browser.Version() > 6) {
timer = setInterval(function () { GetLatestData(obj, settings.refresh) }, settings.refresh * 1000);
}
});
};
function GetLatestData(obj, refresh) {
var _url = "/path/updated-data.htm";
$.ajax({
url: _url,
dataType: "html",
complete: function () {},
success: function (data) {
obj.empty().append(data);
}
}
});
}
})(jQuery);
在GET请求中添加一个随机数,这样IE就不会在缓存中将其标识为“相同”。此数字可以是时间戳:
new Date().getTime()
编辑可能创建请求的url:
var _url = "/path/updated-data.htm?" + new Date().getTime()
我相信这不会导致任何错误
EDIT2很抱歉,我刚刚读了你的帖子,发现这不是你的选择
您说“托管在Akamai上,无法接受查询字符串”,但为什么不呢?
我从来没有听说过一个页面不接受额外的“?blabla”,即使它是html。这让我抓狂。我尝试了许多缓存破坏技术和设置缓存头。因此,其中许多要么不起作用,要么是白费力气。我找到的唯一测试正常的解决方案是设置:
Header Pragma: no-cache
我希望它能让其他人省去IE的麻烦。我应该提到的是,数据文件托管在Akamai Netstorage上,不允许查询。不幸的是,您在Akamai中传递了一个查询字符串,它从源服务器中提取,我们希望避免在源服务器上产生沉重的流量负载。