如果我在本地上下文中断言ajax缓存设置,jQuery 1.4.2会省略 timestamp GET参数(以阻止浏览器缓存):
$.ajax({
url: searcher,
data: keys,
cache: true,
type: 'GET',
dataType: 'json',
success: function(data) {
// something
});
但如果我将设置从那里移出并进入全局上下文,它包括时间戳:
$.ajaxSetup({cache: true});
此外,如果我让默认值适用,jQuery会设置时间戳,这似乎与手册不符。
你有同样的经历吗?
来自服务器的HTTP缓存控制响应头是否会影响此jQuery功能?
答案 0 :(得分:9)
看起来很有效。 以下三个ajax调用仅在第二种情况下将时间戳作为参数传递。 timestamp参数的名称不是时间戳,而是下划线。
$.ajax({ url: '/?=testDefault',
data: { 'cache': 'default' }
});//no timestamp
$.ajaxSetup({ cache: false });
$.ajax({ url: '/?=testFalse/',
data: { 'cache': 'false' }
});//yes, a timestamp
$.ajaxSetup({ cache: true });
$.ajax({ url: '/?=testTrue/',
data: { 'cache': 'true' }
}); //no timestamp
顺便说一句,您使用的是自动完成插件吗?默认情况下会传递时间戳参数。您可以使用extraParams选项通过传递类似的内容来覆盖它。
extaParams: {timestamp:'cache'}
答案 1 :(得分:-2)
您可以手动添加时间戳作为get参数,这是一个非常好的解决方法吗?
function myAjaxFunction()
{
var tS=new Date().getTime();
$.ajax({
url: searcher,
data: {timestamp:tS},
cache: true,
type: 'GET',
dataType: 'json',
success: function(data) {
//something here
}});
}