我正在尝试从某些代码主机导入一些javascript文件。
$.when(
$.getScript('http://pingzi.googlecode.com/svn-history/r30/branches/wangqi/web/jquery.window.min.js'),
$.getScript('http://mottie.github.com/tablesorter/js/jquery.tablesorter.js'),
$.getScript('http://tconnell.com/samples/scroller/lib/jquery.tablesorter.scroller.js'),
$.getScript('http://code.highcharts.com/stock/highstock.js'),
$.Deferred(
function(deferred) {
$(deferred.resolve);
}
)
).done(function() {
// my function goes here....
});
当我尝试调用这些URL来导入js文件时,这些URL会附加?_=1344036242417
,然后我实际上无法访问我想要的脚本文件。
即。
"NetworkError: 404 Not Found - http://pingzi.googlecode.com/svn-history/r30/branches/wangqi/web/jquery.window.min.js?_=1344036242417"
任何人都有想法如何绕过这个问题?先感谢您。
答案 0 :(得分:7)
那是因为在jQuery中默认关闭ajax中的缓存,打开它并删除查询字符串:
$.ajaxSetup({
cache: true
});
但这也可能会影响你不想缓存的其他ajax调用,docs for getScript中有更多关于此的调用,甚至还有一些关于创建一个名为cachedScript的缓存getScript函数的方法
您还可以通过使用新选项重新定义函数来启用$ .getScript中的缓存,以通过传递true或false来打开/关闭缓存:
$.getScript = function(url, callback, cache){
$.ajax({
type: "GET",
url: url,
success: callback,
dataType: "script",
cache: cache
});
};
答案 1 :(得分:5)
jQuery
具有针对此类查询的自动缓存机制。
如果您不希望添加额外的参数,请使用以下设置:
$.ajaxSetup({
cache: true
});
答案 2 :(得分:4)
jQuery会自动添加_=1344036242417
,这会破坏网址。注意:
阻止jQuery添加该参数:Ajax get request with useless parameter。要总结该答案,请在致电$.ajaxSetup
以设置$.getScript()
之前使用cache: true
。
默认为[ sic ],
$.getScript()
将缓存设置设为false
。这会将带时间戳的查询参数附加到请求URL,以确保浏览器在每次请求时都下载脚本。您可以使用$.ajaxSetup()
全局设置缓存属性来覆盖此功能:$.ajaxSetup({ cache: true });
答案 3 :(得分:2)
附加的查询字符串用于防止缓存。您可以通过enabling caching禁用此功能:
$.ajaxSetup({
cache: true
});