jQuery追加没有时间戳参数?

时间:2014-07-23 02:49:55

标签: javascript jquery

我尝试使用以下语法动态地向我的网站添加一些JavaScript:

$('head').append('<script type="text/javascript" src="js/myjavascript.js"><\/script>');

它会加载,但是当我观察抛出chrome网络标签时,我发现它的请求是? 例如,在这种情况下,JavaScript的请求URL是:

http://mywebsite/js/myjavascript.js?_=1406082938676

我不知道最终的数字是什么,没有把它设置在任何地方,但我想用这个数字浏览器无法缓存我的JavaScripts。

任何人都知道如何在没有该标志的情况下动态添加JavaScript吗?

2 个答案:

答案 0 :(得分:4)

jQuery默认情况下使用当前时间戳值附加下划线参数。这是为了避免脚本被缓存(即每次执行追加时,浏览器都会下载脚本)。

您可以更改此行为并允许缓存。从this answer开始,您可以像这样添加ajaxPrefilter

$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
  if ( options.dataType == 'script' || originalOptions.dataType == 'script' ) {
      options.cache = true;
  }
});

答案 1 :(得分:3)

最终的数字是加载脚本的随机数,而不是来自缓存。 以下是它的工作原理:

var script = document.createElement('script');
                    script.type = 'text/javascript';
                    script.src = '/js/' + pagename + '.js?rand=' + Math.random();
                    document.getElementById('dynamicScripts').appendChild(script);

其中:

dynamicScripts 是DOM元素。它可以是'body'

你可以使用ajaxPrefilter进行没有此键的加载