2010-02-22 20 views
3

像我之前那麼多迷失的靈魂一樣,我在Ajax表單提交和IE瀏覽器緩存的蛇坑中掙扎。IE瀏覽器緩存和jQuery表單插件

我想寫一個簡單的腳本使用jQuery表單插件Ajaxify的WordPress的評論。它在Firefox,Chrome,Safari等等中運行良好。 al。,但在IE中,響應文本被緩存,導致Ajax引入錯誤的註釋。

jQuery(this).ajaxSubmit({ 
     success: 
      function(data) { 
       var response = $("<ol>"+data+"</ol>"); 
       response.find('.commentlist li:last').hide().appendTo(jQuery('.commentlist')).slideDown('slow'); 
      }   
     }); 

ajaxSubmit會發送註釋WP-評論-post.php中,它吐出粗暴回整個頁面作爲響應。所以,儘管事實上它像蟾蜍一樣醜陋,但我仍然將響應文本粘貼在一個變量中,使用:last來隔離最近的評論,並將其放在原處。

但是,IE正在返回頁面的緩存版本,該版本不包含新評論。所以「.commentlist li:last」選擇之前的評論,其中的一個副本然後無用地滑落到原始的下方。

我已經嘗試在ajaxSubmit選項中設置「cache:false」,但它沒有效果。我試過設置一個url選項並加上一個隨機數字或時間戳,但是它最終被附加到提交評論給服務器的POST,而不是返回響應的GET,所以沒有效果。我不知道還有什麼可以嘗試的。如果我關閉瀏覽器緩存,一切都可以在IE中正常運行,但這顯然不是我期望任何人查看該頁面所能做的事情。

任何幫助將非常感激。提前致謝!

編輯一個進度報告:一些人建議使用PHP頭來防止緩存,這確實有效。麻煩的是,當提交新評論時,wp-comments-post正在將整個頁面吐出來,而且我可以看到添加標題的唯一方法就是將它們放入WordPress的帖子模板中,該模板會在所有帖子中禁用緩存次 - 不是我正在尋找的行爲。

有沒有一種方法來設置一個PHP條件 - 「if is_ajax」或類似的東西 - 這將保持在常規頁面加載期間應用頭文件,但在頁面被Ajax GET調用時插入它們?

回答

1

我一直在這樣做的方式是通過添加蘭特=新的日期()的getTime()來結束

if(url.replace("?") != url) 
    url = url+"&rand="+new Date().getTime(); 
else 
    url = url+"?rand="+new Date().getTime(); 

功能上面會蘭特=時間追加到URL地址[給.php的地址]如果你提供了get參數,它會加上& rand = time ...否則會加上?rand = time 瀏覽器保持緩存,但頁面不會重疊。

你也可以使用PHP的header()通過設置緩存控制禁用緩存:和Expires:

+0

麻煩與是什麼我添加到URL選項中ajaxSubmit會似乎僅適用於將評論發送給服務器的初始POST,但不應用於返回響應的GET。所以我看到一個POST爲「wp-comments-post.php&rand = [一堆數字]」,但是接下來的一個GET就是沒有rand字符串的頁面的url。這就是IE獲取錯誤數據的地方。 任何想法如何將字符串添加到該GET?我無法弄清楚如何與它進行交互。 – Harfleur 2010-02-22 20:05:50

+0

後續:剛剛嘗試使用PHP標頭()將緩存控制設置爲無緩存,並且它像一個魅力一樣工作。所以這是進步!問題是它會阻止所有Wordpress文章中的緩存,這不是我想要的。儘管如此,仍然是朝着正確方向邁出的一步。 – Harfleur 2010-02-22 20:12:32

+0

你應該只放置你不想緩存的.php頭文件。否則,你應該發送瀏覽器「是的,爲我做緩存」標題 – Warty 2010-02-22 20:57:30

0

在你的PHP的開始將這個:

header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 

這應該幫助。如果沒有 - 請嘗試將隨機數字作爲文件名與標題。

該帖子被重定向到一個get請求,你將不得不發送一些信息到get頁面來控制它是否應該被緩存。

+0

頭文件功能很好,但wp-comments-post正在返回整個頁面。因此,在我的php開頭添加緩存破解標題意味着將其添加到Wordpress帖子模板,這會在所有帖子中殺死緩存 - 顯然不是一個好的舉措。有沒有一種方法來定位「僅當頁面由wp-comments-post」條件返回? – Harfleur 2010-02-22 21:53:05

+0

我不知道wordpress,但您應該嘗試查看輸出標題時可用的HTTP信息。如果調用是在AJAX POST調用之後進行的,而不是由客戶端瀏覽器觸發,那麼它應該是可跟蹤的。 – naugtur 2010-02-23 14:06:05

2

jQuery.ajaxSubmit()採取任何選項爲標準jQuery.ajax()。因此,你可以使用標準的緩存:假選項關閉緩存:

jQuery(this).ajaxSubmit({ 
    cache: false, 
    success: 
     function(data) { 
      var response = $("<ol>"+data+"</ol>"); 
      response.find('.commentlist li:last').hide().appendTo(jQuery('.commentlist')).slideDown('slow'); 
     }   
    }); 
0

這將阻止緩存全球

$(document).ready(function() { 
    $.ajaxSetup({ cache: false }); 
});