Javascript 如何始终刷新ajax加载的文件,避免缓存文件

Javascript 如何始终刷新ajax加载的文件,避免缓存文件,javascript,css,ajax,caching,Javascript,Css,Ajax,Caching,首先,我用以下代码加载外部JavaScript文件(它将ext_chat.js脚本源添加到当前DOM): 在ext\u chat.js中。我在这里包括CSS文件: function r(f) { /in/.test(document.readyState) ? setTimeout('r(' + f + ')', 9) : f() } r(function () { includeCSSfile(getBaseUrl() + '/css/ext_chat.css')); // get

首先,我用以下代码加载外部JavaScript文件(它将
ext_chat.js
脚本源添加到当前DOM):

ext\u chat.js中
。我在这里包括CSS文件:

function r(f) { 
/in/.test(document.readyState) ? setTimeout('r(' + f + ')', 9) : f()
}

r(function () {
    includeCSSfile(getBaseUrl() + '/css/ext_chat.css')); // getBaseUrl() gives correct url
});

function includeCSSfile(href) {
    var head_node = document.getElementsByTagName('head')[0];
    var link_tag = document.createElement('link');
    link_tag.setAttribute('rel', 'stylesheet');
    link_tag.setAttribute('type', 'text/css');
    link_tag.setAttribute('href', href);
    link_tag.setAttribute('media', 'screen');
    head_node.appendChild(link_tag);
}
在第一次加载时,CSS文件可以很好地包含在内。第一次加载页面后,对
ext\u chat.css
文件的所有更改都不会反映出来,而是使用缓存文件。
如何在每次加载页面时强制重新加载CSS文件,而不是引用缓存的CSS文件?

首先,不要使用
setTimeout
的eval版本。改用
.bind

/in/.test(document.readyState) ? setTimeout(r.bind(null, f), 9) : f()
现在,为了避免文件缓存,您应该在URI的末尾附加一个随机查询字符串。通常您会看到
?v=123456789
或类似的内容。在这种情况下,我们可以使用时间戳

r(function () {
    includeCSSfile(getBaseUrl() + '/css/ext_chat.css?v=' + Date.now())); // getBaseUrl() gives correct url
});
阅读材料:


不重新加载页面是不可能的。除了包含外部文件,您还可以使用Javascript来执行此操作。如果您在href中添加时间戳,则可以执行此操作,因此它是唯一的:
link_tag.setAttribute('href',href+'?timestamp='+Date.now())如果设置?timestamp=1234或只是?1234不应产生差异,它必须是唯一的
link_tag.setAttribute('href',href+“?ts=“+new Date().getTime())可以工作-注意
Date.now()
是IE9+谢谢你的帮助和很好的回答。不过,有趣的是,为什么在html文档中包含css文件不使用缓存,但在外部javascript文件中包含css文件时,却使用缓存。
r(function () {
    includeCSSfile(getBaseUrl() + '/css/ext_chat.css?v=' + Date.now())); // getBaseUrl() gives correct url
});