在jquery ajax调用上的浏览器上显示缓存数据

时间:2013-11-21 14:09:34

标签: java jquery ajax

我跟随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调用和增加和减少间隔时间但仍然存在问题。 有什么建议吗?

2 个答案:

答案 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