4

我注意到 Firefox 不会自动缓存 GET 请求。按照我使用的代码:

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

使用 jquery 可以提供cache: true;,如何使用 Vanilla Javascript(客户端)保存在缓存中?也可以决定多长时间?你能给我一个代码示例吗?先感谢您!

4

2 回答 2

1

Web 缓存主要由服务器发送的标头(过期:等)控制。浏览器有时会“作弊”并且不会真正缓存,即使标头允许它们......可能是因为用户使用他们的 UI 关闭了缓存,例如通过将缓存大小设置为零。但是,“欺骗”另一个方向的浏览器,即使标头不允许缓存,仍然(有充分的理由)非常罕见。

如果您没有进行缓存,则它是文件和服务器(或者可能是浏览器配置)的功能,而不是任何浏览器类型或版本。(以不同的方式说同样的事情,如果服务器发送了所需的标头,您的 Firefox 将很好地缓存。)标头由不同的服务器和不同的提供者以多种方式控制。对于 Apache 服务器,细节可能在“.htaccess”文件中,通常可以使用预先编写的模板。

大致来说,使用 HTML4,您根本无法从客户端控制 Web 缓存,无论您使用什么工具,也无论您的程序做什么。HTML5 中新的“在线应用程序缓存”或“appcache”提供了一个通用例外……但有其他限制,例如关于“每个站点一个”和“同源”的限制。

于 2013-08-17T01:09:46.630 回答
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来解决刷新问题。

但是,嘿,我没有得到报酬来写这个:)。

于 2013-08-17T02:05:21.997 回答