我在JQuery中遇到了一个相当离奇的行为。
我正在使用以下代码动态加载一系列脚本:
for (var i=0; i<requiredScripts.length; i++)
{
$.ajax({
url: baseURL+"js/"+requiredScripts[i],
async: false,
dataType: 'script',
success: checkLoaded
});
}
checkLoaded
函数只增加一个计数器,以便在加载所有脚本后执行某些功能。
在我上传其中一个已加载脚本的较新版本之前,一切正常。 JQuery似乎继续加载旧的。我试图刷新(并强制刷新)页面是徒劳的......
所以我禁用了缓存(来自WebDeveloper工具栏),现在脚本神奇地加载了。 但是当我重新启用缓存时,旧脚本又回来了......
我甚至从服务器上删除了文件,但没有做任何事情! (除非我禁用缓存,即)。
我确信我只是错过了一些非常简单的东西,但我无法理解。
提前感谢任何可以提供帮助的人。
编辑:只是为了澄清,我确实希望缓存该文件。我不明白的是为什么强制刷新页面不会导致获取新脚本。
另外,请注意,只有在我使用JQuery加载文件时才会发生这种情况,如果我在HTML中手动添加它们,强制刷新会加载新页面。
编辑#2 :通过从FF删除缓存来解决。仍然,不明白为什么CTRL + SHIFT + R没有做到这一点......
答案 0 :(得分:2)
$ .ajax有一个缓存选项,与mck89的答案完全相同,但有点整洁:
$.ajax({
url : 'example.com',
cache : false,
....
});
答案 1 :(得分:1)
您可以简单地使用经典缓存禁用方法。
var cd=+new Date();
for (var i=0; i<requiredScripts.length; i++)
{
$.ajax({
url: baseURL+"js/"+requiredScripts[i]+"?"+cd,
async: false,
dataType: 'script',
success: checkLoaded
});
}
通过这种方式,脚本URL总是不同的,并且您确定其内容未被缓存。
答案 2 :(得分:0)
告诉apache为您的JS文件发送无缓存标头:
<Directory "/path/to/baseURL/js">
Header Set Cache-Control "max-age=0, no-store"
</Directory>