2011-04-13 49 views
0

我有一個小問題,我不知道如何處理。IE瀏覽器不刷新後Ajax獲得/職位

我寫了一些jQuery後/得到哪些在FF,Opera和Chrome罰款。但是當從資源管理器(任何版本)運行時,請求中更新的內容不會被加載到瀏覽器中。我使用了開發人員工具並調試了腳本,並且請求以正確的參數發送。這些操作甚至可以執行,但在清除瀏覽器歷史記錄或打開/關閉瀏覽器之前,這些操作是不可見的。

這可能是一個愚蠢的問題,但我如何讓IE識別這些請求的變化?

回答

12

嘗試cache: false參數設置爲你的AJAX請求的瀏覽器可能會緩存GET請求:

$.ajax({ 
    url: '/foo', 
    type: 'GET', 
    cache: false, 
    success: function(result) { 
     // TODO: update the DOM with the results 
    } 
}); 
+0

我和IE有同樣的問題。在一個地方,IE從HTML中剝離出了div標籤,這是我在Ajax調用成功時取代的。在另一種情況下,我無法進行調用,因爲雖然我將值賦給了一個變量,但我並沒有這樣寫 - var variablename = value。 – KutePHP 2011-04-13 09:29:52

+0

我認爲它現在可行!看起來像高速緩存:假是它的工作。根據另一篇文章,它所做的是插入一個時間戳,以便IE能夠識別更新。不錯的一個 – tohereknowswhen 2011-04-13 09:32:07

+0

我遇到過類似的問題。如果您決定完全關閉緩存,IE確實會忽略您。我還沒有找到有效關閉緩存客戶端的方法。 – Flater 2012-07-12 11:55:30

1

嘗試下面的添加到響應頭和IE不會再緩存:

response.addHeader("Pragma", "no-cache"); 
response.addHeader("Cache-Control", "no-cache"); 
response.addHeader("Cache-Control", "no-store"); 
response.addHeader("Cache-Control", "must-revalidate"); 
response.addHeader("Cache-Control", "Post-Check=0"); 
response.addHeader("Cache-Control", "Pre-Check=0"); 
response.addHeader("Expires", "Mon, 1 Jan 2006 05:00:00 GMT");//in the past 

注意:代碼是java代碼

+0

只是一個問題;代碼去哪裏? – tohereknowswhen 2011-04-14 12:12:29

+0

在服務器端,在你自己關閉響應之前;在完成請求處理(獲取數據或執行您想要執行的操作)之後,將結果寫入響應並將這些參數添加到響應的頭部。 – Saeed 2011-04-14 14:28:14

0

在IE中使用ajax調用它的create cache並存儲這個舊值。當y ou收到它的put catch值的響應,所以你可以使緩存爲false。

$.ajaxSetup({ cache: false }); 

      OR 

    $.ajax({ url: your need url, 
      cache: false, 
      type: 'get', 
      data:'your parameters', 
      success: function(result) { 
      //put your code here... 
      } 
    }); 

你既可以在你的code.but第一個答案用的是最好的。

2

發生什麼事情是,您可能正在向您的AJAX調用的Web服務發出GET請求。

Internet Explorer以其智慧會自動緩存來自GET請求的響應,而其他瀏覽器會讓您決定是否要緩存結果。一旦IE瀏覽器成功提出GET請求,它將不再進行該調用,直到緩存在該對象上到期爲止。解決方案是:

使用POST: 一個選項是簡單地在您的應用程序中使用POST請求,而不是GET請求。在客戶端和服務器端,從GET切換到POST通常是一個小改動。

響應頭:

您還可以通過與響應一起發送附加頭防止緩存。通過指定「Cache-Control」標頭的值爲「no-cache,no-store」並將其返回給Web服務響應,您可以指示瀏覽器不緩存結果。

的jQuery:

最後,如果你使用jQuery,你可以指定你不想從你的AJAX請求緩存響應無論是跨使用$ .ajaxSetup(板)方法或者以每個請求爲基礎緩存:false。

0
$.ajax({ 
     type: 'GET', 
     cache: false, 

這是作品寫cache: false時,工作在Internet Explorer中的版本10和11也是在Firefox和克羅默。謝謝你堆棧溢出。