缓存AJAX请求
我正在向一个PHP应用程序发送AJAX GET请求,并希望缓存请求返回以供以后使用。
由于我使用GET,因此不同的请求请求不同的URL(例如getHTML.php?page = 2和getHTML.php?page = 5)。
我需要在PHP应用程序中声明哪些标头,以使客户端浏览器以适当的方式缓存请求URL内容? 我是否需要在处理AJAX请求的Javascript中声明任何内容(我使用的是具有缓存参数的jQuery的$ .ajax函数)?
我如何处理更改例如getHTML.php?page = 2的内容的编辑,以便客户端不会回退到缓存版本? 向GET请求添加另一个参数,例如getHTML.php?page = 2&version = 2是不可能的,因为在没有任何检查的情况下自动创建了到请求的URL的链接(这最好是我想要的方式)。
当我尝试AJAX请求缓存的请求URL时,浏览器将如何反应? AJAX请求会立即返回成功吗?
谢谢
威廉
在服务器上添加以下标头:
header("Cache-Control: private, max-age=$seconds"); header("Expires: ".gmdate('r', time()+$seconds));
$秒有明显的含义。
另外,检查您的服务器是否不发布其他一些反缓存标头,如Pragma。 如果是这样,请添加“Pragma:cache”标头。
刷新页面后,即使您之前已经请求了内容,您仍然会对内容进行服务器调用。 PHP标题无法帮助您解决这个问题。
我认为您需要的是当前页面中已从服务器请求的内容的客户端缓存机制。
对于此用例,您可以在JavaScript中使用哈希表,并在调用服务器之前进行查询。 这将增强用户体验,因为用户不必等待他已经看过的内容的另一个请求。
这是一个例子:
//placeholder for hash table as cache var cache = []; var getPage = function(pageNr){ if(cache[pageNr]){ //content is already in cache, use it from there handleContent(cache[pageNr]); } else{ //object with parameteres sent with GET request var params = {}; params.page = pageNr; $.ajax({ url: "getHTML.php", data: params, cache: false, success: function(response){ //handle your response here handleContent(response); //store the response in the cache for later use cache[pageNr] = response; } }); } };
现在,请求页面将首先查看当前缓存以查看您是否拥有内容。 如果没有,它将使服务器调用并将响应存储在缓存中。
它类似于在Google财经中滚动新闻时的用户体验
请注意,如果刷新页面,则此缓存将被删除。
如果对页面进行编辑,则必须使用Maurice Perry的Yahoo Exceptional Performance链接,以确保您的服务器始终返回最新版本的内容。
有关JavaScript中哈希表的更多信息, 请访问 : http : //www.mojavelinux.com/articles/javascript_hashes.html