我正在构建新闻应用。我每隔10秒刷新一次div
类.new_feed
,以检查是否有更新,以及何时显示。现在问题是,当其中有一个新的Feed,并且10秒钟已经启动,并且您没有点击查看,并且在您点击之前等待40秒,它会显示4条记录而不是1条记录。我认为这个问题与缓存有关。
$(document).ready(function() {
$.ajaxSetup({ cache: false });
setInterval(function() {
$('.new_feed').load('headline.asp');
}, 10000);
});
$(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>
<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>
答案 0 :(得分:0)
您必须在服务器端设置Cache-Control
HTTP/1.1
标头。这是推荐的方法。
但是,如果您无法更改服务器设置,也可以使用hacky解决方案。在请求中使用nonce:
$('.new_feed').load('headline.asp?' + nonce);
因为它看起来像是对浏览器的不同请求,所以它将忽略缓存的值。
nonce最简单的解决方案是使用当前时间:
var date = new Date();
var nonce = date.getMilliseconds();
答案 1 :(得分:0)
我写了一个答案,指出$.ajax
的cache:false
选项,但在审核你的OP后,我意识到你已经在使用它了。该文档指出cache:false
选项仅在GET
个请求(以及{8}}对IE8的请求附加时间戳。)
由于您使用的是POST
,POST
选项实际上无法提供帮助(除非您使用的是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
})
}
动词和路由用于请求数据。