2013-07-27 45 views
4

我注意到Firefox不會自動緩存GET請求。下面的代碼我使用:在Javascript中緩存GET響應Vanilla

var ajax = new XMLHttpRequest(); 
ajax.open("GET","page.php?val=" + val,true); 
ajax.send(); 

與jQuery可以給cache: true;,我怎麼能保存在與香草的Javascript(客戶端)的緩存?也可以決定多久?你能給我一個代碼的例子嗎?先謝謝你!

+1

'cache:true',不*保證*文件將被緩存。你需要從你的服務器('Cache-Control','Last-Modified'等)發出正確的與緩存相關的頭文件,*然後* FireFox和jQuery都有可能緩存文件。請參閱http://www.mnot.net/cache_docs/ – Matt

+0

Internet Explorer自動保存GET響應。我第一次可以說Internet Explorer獲勝:D – user2626246

回答

1

Web緩存在很大程度上受服務器發送的頭部控制(Expires:等)。瀏覽器有時會「作弊」,即使標題允許它們也不會真正緩存......可能是因爲用戶使用他們的UI關閉了緩存,例如通過將緩存大小設置爲零。但是,「欺騙」其他方向的瀏覽器,即使標頭不允許,仍然會緩存,這是非常不尋常的。

如果緩存不在您身上,它是文件和服務器(或者瀏覽器配置)的函數,而不是任何瀏覽器類型或版本。 (要用不同的方式說同樣的事情,如果服務器發送了所需的頭文件,您的Firefox將緩存得很好)。不同的服務器和不同的提供者可以通過各種方式控制頭文件。對於Apache服務器,本質可能在「.htaccess」文件中,其預先編寫的模板通常可用。

第一次接近HTML4,無論您使用什麼工具,無論您的程序如何操作,都無法控制客戶端的Web緩存。新的「在線應用程序緩存」或「appcache」在HTML5中提供了一個通用的例外......但是還有其他限制,例如關於「每個站點一個」和「相同來源」的限制。

1

可以緩存使用簡單的哈希響應,這樣的:

var cache = {}; 
function getData(variable) { 
    if (cache[variable]) { 
     return cache[variable]; 
    } 

    // previous ajax code to get the data... 
    // in the response handler, do: 
    cache[variable] = data; 
} 

這是一個天真的實施緩存機制:僅適用於網頁(即壽命,直到頁面刷新或導航遠離),沒有任何過期機制,以及其他缺點,我敢肯定。例如,您可以使用localStorage來解決刷新問題。

但是,嘿,我沒有得到報酬寫這:)。