firefox将querystring参数添加到外部javascript文件中

时间:2011-12-16 03:26:19

标签: jquery

在页面加载时,我正在通过jquery ajax加载一个html页面。这个html页面包含一个“视图”,并在网站布局的“主要内容”div中呈现。 示例视图加载的html:

<div>hello world</div>
<script src="/javascript.js" type="text/javascript"></script>

问题是Firefox通过向它添加一个唯一的查询字符串参数来加载javascript.js ...阻止它被缓存。

Firebug显示: 获取http://nodejs/javascript.js?=_1324005635768

这仅适用于在视图中动态加载的javascript。站点布局中的javascripts加载和缓存就好了。 Firebug显示jquery ajax返回没有querystring参数的普通视图,因此它是添加它的firefox。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

它不是firefox,它的jquery和ajax调用。使用POST而不是获取或

来自jQuery(link

cacheBoolean 默认值:true,false表示dataType'script'和'jsonp'

如果设置为false,它将强制浏览器不缓存请求的页面。将cache设置为false还会将查询字符串参数“_ = [TIMESTAMP]”附加到URL。

我的建议是POST,你的问题就会消失。

答案 1 :(得分:1)

确保将缓存选项设置为true。

jQuery.ajax({
  url: "test.html",
  cache: true
})

jQuery默认将缓存设置为true,除非数据类型是“script”或“jsonp”。 http://api.jquery.com/jQuery.ajax/ 在您的情况下,似乎数据类型是'script',这就是为什么它不缓存结果。

答案 2 :(得分:1)

默认情况下,jQuery会为脚本附加该唯一查询,并且由于请求是在内部发生的,因此您无法直接禁用它。

这应该从这些请求中删除'_'查询字符串。

$.ajaxSetup({
    beforeSend: function(jqXHR, settings) {
        if (settings.dataType === 'script') {
            settings.url = settings.url.replace(/\??&?_=[0-9]+/, '');
        }
    }
})

答案 3 :(得分:0)

加载是.ajax()的简写。改为使用它并将缓存设置为false

$.ajax({
  url: '/templates/' + template_name ,
  success: function(data) {
    $('.main_content').html(data)
  },
  cache: false
});