我们的调查向我们表明,并非所有浏览器都以统一的方式尊重http缓存指令.
出于安全原因,我们不希望在我们的应用程序某些网页缓存,有史以来,通过Web浏览器.这必须至少适用于以下浏览器:
我们的要求来自安全测试.从我们的网站注销后,您可以按后退按钮查看缓存页面.
我正在编写一个应用程序,我正在尝试将简单的AJAX功能结合起来.它在Mozilla Firefox中运行良好,但在Internet Explorer中有一个有趣的错误:每个链接只能被点击一次.浏览器必须完全重启,只需重新加载页面就行不通.我写了一个非常简单的示例应用程序来演示这一点.
Javascript转载如下:
var xmlHttp = new XMLHttpRequest();
/*
item: the object clicked on
type: the type of action to perform (one of 'image','text' or 'blurb'
*/
function select(item,type)
{
//Deselect the previously selected 'selected' object
if(document.getElementById('selected')!=null)
{
document.getElementById('selected').id = '';
}
//reselect the new selcted object
item.id = 'selected';
//get the appropriate page
if(type=='image')
xmlHttp.open("GET","image.php");
else if (type=='text')
xmlHttp.open("GET","textbox.php");
else if(type=='blurb')
xmlHttp.open("GET","blurb.php");
xmlHttp.send(null);
xmlHttp.onreadystatechange = catchResponse;
return false;
}
function catchResponse()
{
if(xmlHttp.readyState == 4)
{ …Run Code Online (Sandbox Code Playgroud) 可能重复:
阻止缓存AJAX调用
我正在使用jQuery来读取Web服务器上的一个小文本文件:
jQuery.get('scores.txt', function(data) {
parseScores(data);
});
Run Code Online (Sandbox Code Playgroud)
这几乎可以正常工作 - 但它无法可靠地加载最新版本的文件.即使story.txt已更改,刷新页面也会返回完全相同的值data.
服务器是标准的Mac OS Apache,没有启用缓存,它与客户端是同一台机器 - 所以理论上我和它之间没有其他缓存.
如果我加载http://127.0.0.1/scores.txt到浏览器然后它总是打开最新版本.
查看Apache日志,对于页面无法更新的时间,jQuery GET请求永远不会到达服务器.
我怀疑我可能需要将此问题移至serverfault.com,但任何人都可以看到我的JavaScript出现问题会使其以这种方式运行吗?
有没有办法使用JavaScript/jQuery强制浏览器请求文件的新副本?
提前致谢.
我正在使用jQuery .get()函数加载模板文件,然后通过定位特定的DOM元素将加载的HTML显示在页面的一部分中.它运作良好,但我最近意识到的原因让我感到困惑的是它正在缓存我的模板文件并屏蔽我所做的更改.
别误会我的意思......我喜欢和下一个人一样的缓存.我希望它在客户端缓存和服务器上的文件之间没有时间戳差异时进行缓存.然而,这不是正在发生的事情.为了使它更奇怪...使用相同的功能加载模板...一些模板文件正在加载更新而其他模板文件没有(更喜欢缓存版本而不是最近的更改).
下面是我使用的加载功能.
function LoadTemplateFile ( DOMlocation , templateFile , addEventsFlag ) {
$.get( templateFile , function (data) {
$( DOMlocation ).html(data);
});
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
新细节:我一直在做一些调试,现在看到返回到成功函数的"数据"变量确实有更新的信息但是由于我还不清楚的原因是什么插入到DOM中的是旧版本.如何发生这种情况现在已成为我的问题.
我有一个jstree.在页面加载时,jstree从服务器中填充,因为它对服务器进行了新的调用,但之后每当我刷新页面时,它总是从缓存中获取数据而不是调用服务器,因此总是采用旧的要填充的数据.我使用的是jstree 3.0.2版本.以下是在页面加载时生成jstree的代码.
$('#tree').jstree({
'core': {
data:{
'url':'getjstree' // this is the url which will get the json data from the server
}
}});
Run Code Online (Sandbox Code Playgroud)
我们如何解决这个问题以获得每次调用的新数据,我之前想到的一个解决方案是通过调用硬刷新的javascript代码
location.reload(true);
Run Code Online (Sandbox Code Playgroud)
但这确实刷新了json数据,但进入了递归调用,从而挂起了页面.请帮助我们如何解决这个问题.
caching ×3
ajax ×2
javascript ×2
jquery ×2
apache ×1
getjson ×1
http ×1
http-headers ×1
https ×1
jstree ×1