2013-11-21 26 views
0

我有以下ajax調用與我寫在jquery: 這從控制器以json格式持續響應,並通過設置值顯示在屏幕上(不在下面的代碼中) 。緩存的數據顯示在瀏覽器上jQuery的ajax調用

$(function() { 
$(".master_status").hide(); 
    setInterval(
    function() { 
     $.ajax({ 
     type : "Get", 
     url : "getDeviceInfo.htm", 
     success : function(response) { 
      if(response != null){ 

      } 
     } , 
    error : function(e) { 
     } 
    }); 
    }, 500); 

    } 

而且我每隔半秒就從控制器獲取數據。 但有時它會顯示以前的狀態數據的一小部分秒。 我traied緩存:假,在Ajax調用和增加和減少間隔時間,但仍存在問題。 有什麼建議嗎?

回答

1

原始數據獲取呈現的原因:

瀏覽器努力讓您的網絡體驗變得更加輕鬆快捷。爲此,他們甚至緩存請求的響應,以便再次調用ame頁面。他們顯示它是本地副本而不是再次訪問服務器。但它有時會成爲問題。

解決方案: 嘗試在url的末尾添加一個唯一的請求參數。 所以,如果你要的網址(http://something.com/data),嘗試改變它

http://something.com/data?someUniqueThing 

獨特的東西:發送請求之前產生一個隨機數並追加到URL。 所以你的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。瀏覽器將其視爲新的請求,但在服務器端,它不會造成副作用。

+0

阿曼阿羅拉:我嘗試了你的方法,但仍然存在問題。 –

+0

你能分享一下更新的代碼嗎? –

+0

$(函數(){$ ( 「master_status。」)隱藏(); 的setInterval( 函數(){$ 阿賈克斯({ 類型: 「?getDeviceInfo.htm」: 「獲取」, 網址+的Math.random(), 成功:功能(響應){ 如果(響應!= NULL){ } }, 錯誤:功能(E){ } });} ,500); } –

0

這是在IE中衆所周知的問題。由於您正在使用jquery,因此您可以在$.ajax調用中使用緩存屬性。請參閱jquery API瞭解更多信息。

+0

我這樣做是爲了Firefox,而不是爲IE –

+0

你是否試過緩存屬性? –