jQuery ajaxSetup({cache:true})通常工作吗?

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缓存设置,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});
此外,如果我应用默认值,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'}

这是一个下划线,不是一个空白字符。詹姆斯,我认为你对自动完成插件的看法是正确的。这可以解释我所看到的前后矛盾。