JQuery和脚本缓存

时间:2010-08-06 07:13:47

标签: jquery caching

我在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没有做到这一点......

3 个答案:

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