jQuery添加查询字符串到脚本加载?

时间:2014-03-24 20:23:49

标签: javascript jquery ajax

将此js添加到我的页面:

$("#divExample").append("<script type='text\/javascript' src='\/scripts\/test_code.js'><\/script>");

请求:

http://.../scripts/test_code.js?_=1395691742415

我需要删除查询字符串,因为它阻止了js文件被缓存。我最好的猜测是,这在某种程度上与jQuery ajax有关,它在执行某些类型的调用时会附加相同类型的查询字符串(例如jsonp)。

我为什么这样做的背景:我需要推迟脚本加载(实际上是更大的js块的一部分),直到页面就绪事件完成为止。以上只是一个显示相同症状的减少样本。

目前正在使用jQuery 1.8.3,但我真的希望答案不包括升级,因为这样会破坏依赖项。

1 个答案:

答案 0 :(得分:5)

将jQuery缓存全局设置为true以防止这种情况。

$.ajaxSetup({
    cache: true
});

即使这看起来只是针对ajax的配置,但它会影响您使用的<script>标签。

如果您不想将全局应用于所有ajax请求,则可以使用普通Javascript(无jQuery)来执行此操作:

var s = document.createElement('script');
s.type = 'text/javascript';
s.src = 'test.js';
document.getElementById("divExample").appendChild(s);

第三个选项是您可以使用$.ajax导入脚本,如下所示:

$.ajax({
  url : 'test.js',
  type : 'script',
  cache : true,
  success : function(){

  }
});