jQuery ajaxSetup({cache:true})通常工作吗?
如果我在本地上下文中断言ajax缓存设置,jQuery 1.4.2将省略timestampGET参数(以阻止浏览器缓存):jQuery ajaxSetup({cache:true})通常工作吗?,jquery,ajax,caching,Jquery,Ajax,Caching,如果我在本地上下文中断言ajax缓存设置,jQuery 1.4.2将省略timestampGET参数(以阻止浏览器缓存): $.ajax({ url: searcher, data: keys, cache: true, type: 'GET', dataType: 'json', success: function(data) { // something }); $.ajaxSetup({cache: true});
$.ajax({
url: searcher,
data: keys,
cache: true,
type: 'GET',
dataType: 'json',
success: function(data) {
// something
});
$.ajaxSetup({cache: true});
但是,如果我将设置从那里移动到全局上下文中,它包括时间戳:
$.ajax({
url: searcher,
data: keys,
cache: true,
type: 'GET',
dataType: 'json',
success: function(data) {
// something
});
$.ajaxSetup({cache: true});
此外,如果我应用默认值,jQuery将设置时间戳,这似乎与手册不匹配
你也有同样的经历吗
来自服务器的HTTP缓存控制响应头是否会影响此jQuery功能?您可以手动添加时间戳作为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
}});
}
看起来很有效。
在第二种情况下,以下三个ajax调用仅将时间戳作为参数传递。timestamp参数的名称不是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'}
这是一个下划线,不是一个空白字符。詹姆斯,我认为你对自动完成插件的看法是正确的。这可以解释我所看到的前后矛盾。