防止jQuery.getScript添加?_ = timestamp

时间:2015-03-09 06:14:11

标签: javascript jquery

如何防止jQuery.getScript在网址上添加?_=timestamp

error log

源代码:

$.getScript('/js/ace/ace.js',function(res) {
   // do something
}); 

3 个答案:

答案 0 :(得分:6)

这似乎与$.getScript('/js/ace/ace.js',function...)来电有关。

您可以考虑尽可能高地添加以下代码段:

$.ajaxSetup({
    cache: true
});  

true中放置缓存:$.ajax()不会影响$.getScript('/js/ace/ace.js',function...)
以任何方式,这是该截图中可见的内容。

另一种方式,如jQueryByExample所述:

在调用$.getScript方法之前,

(1),您可以为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

答案 1 :(得分:2)

根据之前的回复,我使用承诺进行了另一次尝试,认为这更有趣。

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!');
});

答案 2 :(得分:1)

没关系,我根据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
});

这些函数不会检查是否有任何脚本加载失败。