在页面加载时,我正在通过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。
我该如何解决这个问题?
答案 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
});