我跟随ajax调用了jquery: 它以json格式从控制器获取连续响应,并通过设置值显示在屏幕上(下面的代码中没有)。
$(function() {
$(".master_status").hide();
setInterval(
function() {
$.ajax({
type : "Get",
url : "getDeviceInfo.htm",
success : function(response) {
if(response != null){
}
} ,
error : function(e) {
}
});
}, 500);
}
我每半秒钟从控制器获取数据。 但有时它会显示以前的状态数据,只需几分之一秒。 我追踪缓存:false,在ajax调用和增加和减少间隔时间但仍然存在问题。 有什么建议吗?
答案 0 :(得分:1)
旧数据呈现的原因:
浏览器努力使您的网络体验更轻松,更快捷。为此他们甚至缓存了请求的响应,所以如果再次调用ame页面。他们将其显示为本地副本,而不是再次访问服务器。但它有时会成为一个问题。
的解决方案:强>
尝试在网址末尾添加唯一的请求参数。
因此,如果您要对网址(http://something.com/data),
进行尝试,请将其更改为
http://something.com/data?someUniqueThing
唯一的事情:在发送请求之前生成一个随机数并将其附加到网址。 所以你的ajax调用将成为:
$(function() {
$(".master_status").hide();
setInterval(
function() {
$.ajax({
type : "Get",
url : "getDeviceInfo.htm?someUniqueThing",
success : function(response) {
if(response != null){
}
} ,
error : function(e) {
}
});
}, 500);
}
它不会让浏览器缓存您的请求。 为什么? 因为每个第二个请求最后都会有一个uniqueId。浏览器将其视为新请求,但在服务器端,它不会产生副作用。
答案 1 :(得分:0)
这是IE中众所周知的问题。由于您使用的是jquery
,因此您可以在$.ajax
调用中使用缓存属性。有关详细信息,请参阅jquery API。