JQuery和脚本缓存
我在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没有做到这一点……
$ .ajax有一个缓存选项,它与mck89的答案完全相同,但是有点整洁:
$.ajax({ url : 'example.com', cache : false, .... });
您只需使用经典缓存禁用方法即可。
var cd=+new Date(); for (var i=0; i
通过这种方式,脚本URL始终不同,并且您确定其内容未缓存。
告诉apache为您的JS文件发送no-cache标头:
Header Set Cache-Control "max-age=0, no-store"