每隔x秒刷新一次页面后阻止缓存

时间:2015-02-10 17:30:31

标签: javascript jquery html ajax

我正在构建新闻应用。我每隔10秒刷新一次div.new_feed,以检查是否有更新,以及何时显示。现在问题是,当其中有一个新的Feed,并且10秒钟已经启动,并且您没有点击查看,并且在您点击之前等待40秒,它会显示4条记录而不是1条记录。我认为这个问题与缓存有关。

刷新获取新闻标题的脚本

$(document).ready(function() {
    $.ajaxSetup({ cache: false }); 
    setInterval(function() {
    $('.new_feed').load('headline.asp');
    }, 10000); 
});

获取Feed

$(function() {
    //More Button
    $('.more2').live("click",function() {
        var u_pic_id = $(this).attr("id");
        if (u_pic_id) {
            $("#more2"+u_pic_id).html('<img src="moreajax.gif" />');
            $.ajax({
                type: "POST",
                url: "show_more.asp",
                data: "lastmsg="+ id, 
                cache: false,
                success: function(html) {
                    $("ol#updates2").append(html);
                    $("#more2"+id).remove();
                }
            });
        }
        return false;
    });
});

</script>

HTML

<div id="more2<%=(rs_ncount_id.Fields.Item("id").Value)+1%>" class="morebox2">
    <a href="#" class="more2" id="<%=(rs_ncount_id.Fields.Item("id").Value)+1%>">
        Load New Feeds
    </a>
</div>

2 个答案:

答案 0 :(得分:0)

使用HTTP标头

您必须在服务器端设置Cache-Control HTTP/1.1标头。这是推荐的方法。

在请求中使用nonce

但是,如果您无法更改服务器设置,也可以使用hacky解决方案。在请求中使用nonce:

$('.new_feed').load('headline.asp?' + nonce);

因为它看起来像是对浏览器的不同请求,所以它将忽略缓存的值。

nonce最简单的解决方案是使用当前时间:

var date = new Date();
var nonce = date.getMilliseconds(); 

答案 1 :(得分:0)

我写了一个答案,指出$.ajaxcache:false选项,但在审核你的OP后,我意识到你已经在使用它了。该文档指出cache:false选项仅在GET个请求(以及{8}}对IE8的请求附加时间戳。)

由于您使用的是POSTPOST选项实际上无法提供帮助(除非您使用的是IE8?)。相反,就像@meskobalazs所说的那样,你需要创建和追加nonce

实现此目的的一种方法可能是:

cache:false

当然,如果您有权访问服务器,处理此问题的适当方法是正确设置响应标头。您还可以考虑使用更加RESTful的方法,其中function getValues(id) { var url = 'myUrl?id=' + id; $.ajax({ type: "POST", url: url + '&_=' + (new Date()).getTime() }).done(function(response) { // do stuff }) } 动词和路由用于请求数据。