jQuery ajaxSetup({cache:true})通常有用吗?

时间:2010-05-04 13:05:03

标签: jquery ajax caching

如果我在本地上下文中断言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功能?

2 个答案:

答案 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
        }});
}