默认情况下,$.getScript()禁用缓存,您可以使用$.ajaxSetup并将缓存设置为true。当测试脚本是否真的被Firebug缓存时,大部分时间脚本返回200 (这意味着脚本是一个新的副本),大约20或30次它会返回304 (意味着它使用缓存的版本)。为什么大多数时候它都会得到一个新的副本?
$.ajaxSetup({
cache: true
});
$.getScript( scriptFile );getScript检索的文件尚未编辑,请求是分开的页面更改。
发布于 2013-05-13 09:57:10
在这个问题发布的日期有一个错误,Firefox和Chrome都会声明一个脚本没有从Cache加载,而它确实是从Cache加载的。截至本文回答之日,这个问题仍然存在。最简单的测试方法是使用console.log并发送一个版本号。
要缓存一个动态加载的脚本,只需使用以下代码即可。
function onDemandScript ( url, callback ) {
callback = (typeof callback != 'undefined') ? callback : {};
$.ajax({
type: "GET",
url: url,
success: callback,
dataType: "script",
cache: true
});
}对于开发,您应该注释掉cache: true。
发布于 2012-10-15 03:08:24
首先,让我们弄清楚什么是jQuery禁用缓存。
当jQuery 禁用缓存时,是指通过某种技巧强制浏览器再次加载文件,例如在url末尾添加一个额外的随机数作为参数。
当jQuery 启用缓存时,is 不会强制执行任何操作,而是让您在此文件的头上设置的缓存。这意味着如果您没有设置文件头参数以将其保存在浏览器缓存中,浏览器将尝试通过某些方法再次加载它。
因此,在通过jQuery启用缓存时,您还必须在静态文件上设置正确缓存头,以便保留在浏览器缓存中,否则浏览器可能会再次尝试加载它们。
对于文件,浏览器在标题上看到创建日期,然后连接到服务器,再次询问标题,比较它,如果没有更改,则不再加载它,而是对服务器进行一次调用。
对于您已经设置了最大期限的文件,并且在该日期之前没有询问服务器,那么如果浏览器找到它,则直接从缓存中加载它。
用于汇总的
cache:true让浏览器从你发送的头文件中决定这个文件的缓存。
cache:false强制重新加载该文件。
一些与缓存相关的问题:
测试内部代码
getScript()正在调用的jQuery.get()是的shorthand Ajax function
$.ajax({
url: url,
data: data,
success: success,
dataType: dataType
});因此,通过调用getScript()进行ajax调用,jQuery不会为您的文件保留任何形式的缓存,如果您一开始就这么认为的话。
用于加载脚本的自定义函数
如果您没有成功创建一个全局cache:true,并且您只需要使用cache:true加载一些文件,则可以将自定义函数设置为:
function getScriptCcd(url, callback)
{
jQuery.ajax({
type: "GET",
url: url,
success: callback,
dataType: "script",
cache: true
});
};这不受全局缓存参数的影响,并且加载脚本文件时不会在末尾添加任何非缓存参数。
发布于 2017-03-09 03:39:30
实际上,有一个更好的选择,您可以为某些请求打开缓存,例如:
$.ajaxPrefilter(function( options ) {
if ( options.type==='GET' && options.dataType ==='script' ) {
options.cache=true;
}
});https://stackoverflow.com/questions/12884097
复制相似问题