【发布时间】:2017-08-01 13:48:28
【问题描述】:
如何防止jQuery.getScript在网址上添加?_=timestamp?
源代码:
$.getScript('/js/ace/ace.js',function(res) {
// do something
});
【问题讨论】:
标签: javascript jquery
如何防止jQuery.getScript在网址上添加?_=timestamp?
源代码:
$.getScript('/js/ace/ace.js',function(res) {
// do something
});
【问题讨论】:
标签: javascript jquery
这似乎与$.getScript('/js/ace/ace.js',function...) 调用有关。
您可以考虑将以下sn-p添加到尽可能高的位置:
$.ajaxSetup({
cache: true
});
将缓存:true 放入您的 $.ajax() 不会影响 $.getScript('/js/ace/ace.js',function...)
无论如何,这就是该屏幕截图中可见的内容。
另一种方式,如jQueryByExample所述:
(1) 在调用$.getScript 方法之前,您可以将ajax 请求的缓存设置为true,并在脚本加载后将其设置为false。
//Code Starts
//Set Cache to true.
$.ajaxSetup({ cache: true });
$.getScript(urlhere, function(){
//call the function here....
//Set cache to false.
$.ajaxSetup({ cache: false });
});
//Code Ends
(2) 你只需要添加一个boolean 参数,它将缓存属性设置为true 或false。这就是jQuery 的美妙之处,您可以按照自己的需要重新定义事物。
//Code Starts
$.getScript = function(url, callback, cache){
$.ajax({
type: "GET",
url: url,
success: callback,
dataType: "script",
cache: cache
});
};
所以,现在你调用 $.getScript 之类的,(注意第三个参数)
//Code Starts
$.getScript('js/jsPlugin.js',function(){
Demo(); //This function is placed in jsPlugin.js
}, true);
//Code Ends
【讨论】:
$.ajaxSetup误读为$.ajax
我用promise又做了一次,根据之前的回答,觉得这样更有趣。
window.loadScripts = (scripts) => {
return scripts.reduce((currentPromise, scriptUrl) => {
return currentPromise.then(() => {
return new Promise((resolve, reject) => {
var script = document.createElement('script');
script.async = true;
script.src = scriptUrl;
script.onload = () => resolve();
document.getElementsByTagName('head')[0].appendChild(script);
});
});
}, Promise.resolve());
};
来玩吧
var scripts = [
"app/resources/scriptDoSomething.js",
"app/resources/somethingElse.js"
];
loadScripts(scripts).then(() => {
alert('All scripts were loaded!');
});
【讨论】:
没关系,我根据Caolan 的回答制作了自己的getScript:
H = H || {};
// load a script and run a callback
H.loadScript = function(src, callback) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = src;
script.addEventListener('load', function (e) { H.ExecIfFunction(callback,e); }, false);
var head = document.getElementsByTagName('head')[0];
head.appendChild(script);
};
// sources is array, the load process is serial
H.loadScripts = function(sources, callback) {
var len = sources.length;
var now = 0;
var loadOne = function() {
if(now < len) return H.loadScript(sources[now++],loadOne);
if(now >= len) H.ExecIfFunction(callback);
};
loadOne();
};
使用示例:
H.loadScripts(['/js/ace/ace.js','/js/ace/mode-json.js','/js/jquery-ace.js'],function(){
// do something
});
这些函数不检查是否有任何脚本加载不成功。
【讨论】: