jQuery $.getScript 上次修改日期



我已经读到(出于缓存目的)调用具有上次修改日期的文件并让服务器将其解析为原始文件可能是明智的。通过这种方式,您可以将缓存设置为例如 10 年,并为文件的某个版本使用静态名称。

但是,由于我也在我的网站上异步加载javascript,因此我需要能够在javascript/jQuery中执行相同的操作。

这是我当前的代码,我如何能够获取正在加载的有问题的脚本的最后修改日期?

//load new js
if (typeof loadedScripts[url] === 'undefined') {
    $.getScript("javascript/" + url + ".js", function() {
        if (typeof window["load_" + url] !== 'undefined') {
            promises = promises.concat(window["load_" + url](html));
        }
        loadedScripts[url] = 1;
    });
}
else {
    if (typeof window["load_" + url] !== 'undefined') {
        promises = promises.concat(window["load_" + url](html));
    }
}

(它还执行一个在加载时调用的函数,但这对这个问题并不感兴趣)

我知道可以使用document.lastModified获取当前文档的最后修改日期,但我不确定它将如何转换为$.getScript调用。

我还启用了缓存:

//set caching to true
$.ajaxSetup({
    cache: true
});

出于缓存目的,我宁愿建议使用ETag。http://en.wikipedia.org/wiki/HTTP_ETag

如果需要,我们使用它来破坏缓存,效果很好。

但是,jQuery的Ajax函数提供了一个ifModified参数:http://api.jquery.com/jquery.ajax/

解释如下:

仅当响应已更改时,才允许请求成功 自上次请求以来。这是通过检查上次修改时间来完成的 页眉。默认值为 false,忽略标头。在 jQuery 1.4 中 此技术还会检查服务器指定的"ETAG"以捕获 未修改的数据。

使用此参数,获取脚本的第一个请求如下所示:

GET /script.js HTTP/1.1
Host: www.orange-coding.net
HTTP/1.1 200 OK
Last-Modified: Wed, 02 Jan 2013 14:20:58 GMT
Content-Length: 4096

第二个请求如下所示:

GET /script.js HTTP/1.1
Host: www.orange-coding.net
If-Modified-Since: Wed, 06 Oct 2010 08:20:58 GMT
HTTP/1.1 304 Not Modified

最新更新