2013-02-15 71 views
1

如果在服務器上發生更改,ajax每秒請求頁面自己的url,然後檢查textStatus是否爲notmodified,我試圖使頁面重新加載。如果在服務器上修改了重新加載頁面

setTimeout(function(){ 
    $.ajax({ 
    url : window.location.pathname, 
    dataType : "text", 
    ifModified : true, 
    success : function(data, textStatus) { 
     if (textStatus !== "notmodified") { 
     location.reload(); 
     } 
    } 
    }); 
}, 1000); 

然而,textStatus總是success

+0

檢查您的服務器的緩存標頭。 – SLaks 2013-02-15 14:41:52

+0

我使用[Mongoose](http://code.google.com/p/mongoose/)作爲Web服務器。 – Theodor 2013-02-15 14:53:05

回答

1

用隨機變量只是儘量避免響應的緩存,本身。另外,用!=代替!==

setTimeout(function(){ 
    $.ajax({ 
    url : window.location.pathname + "?" + (new Date()).getMilliseconds(), 
    dataType : "text", 
    ifModified : true, 
    success : function(data, textStatus) { 
     if (textStatus != "notmodified") { 
     location.reload(); 
     } 
    } 
    }); 
}, 1000); 

如果這不起作用,請嘗試更換:

location.reload(); 

有了:

location.href = location.href; 

這也依賴於服務器端腳本。它還需要從服務器端發送...通過設置no-cachecontent-expires

+1

這是瘋了。 JavaScript的全部重點是查看緩存版本是否仍然新鮮,如果不是,則只重新加載!如果你打算改變URL來緩存緩存,那麼你不妨去掉Ajax,然後點擊'location.reload()'。 – Quentin 2013-02-15 14:45:46

+0

那麼你如何檢查緩存?它還需要從服務器端發送...通過設置「no-cache」和「content-expires」。將在答案中更新。你有更好的嗎? – 2013-02-15 14:46:30

+1

代碼試圖使用If-Modified-Since或ETAGS請求(使用Ajax),然後查看是否返回OK或Not Modified(將從服務器端代碼發送)。設置「無緩存」與每次更改URL都會有大致相同的問題。它將永遠停留在一個緩存版本中。 – Quentin 2013-02-15 14:47:35

相關問題