我正在使用HTML 5历史记录api来保存ajax请求发生时的状态,并且如果用户请求到同一页面而没有ajax请求,则我会提供完整的html内容。
浏览器的“重新打开上一个关闭的选项卡”功能带来最新的ajax请求内容,而无需访问服务器。如果浏览器将请求而没有带来最后的请求内容,那么一切都会正常进行。但是浏览器只显示最后一个ajax请求内容。
我已经在Chrome 17,Firefox 10上体会到了这一点。(我没有在ie9上尝试过,因为它没有支持历史记录api)
有什么众所周知的解决方案?
编辑:这些ajax请求只是对服务器的“获取”请求。
出于某些原因,实际上不可能在jsfiddle.net上进行演示。您可以在本地主机中进行演示,如下所示。
向服务器发出“获取”请求并提取json对象,然后将该网址推送到历史记录api中,如下所示。
history.pushState(null,null,url);
然后关闭该标签,然后单击浏览器的“重新打开上一个关闭的标签”功能。你看到了什么 ?杰森反应身体?浏览器显示它而不向服务器发出请求,对吗?
问题是由http响应标头引起的。标头包含有关ajax请求的可缓存信息,因此浏览器显示了来自缓存的url内容,而没有命中数据库。
从响应标头中删除缓存参数后,浏览器便能够访问服务器而不会从缓存中获取内容。