Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox缓存密钥名称以anon开头&;uri=http://xxxx_Javascript_Rest_Firefox_Caching_Xmlhttprequest - Fatal编程技术网

Javascript Firefox缓存密钥名称以anon开头&;uri=http://xxxx

Javascript Firefox缓存密钥名称以anon开头&;uri=http://xxxx,javascript,rest,firefox,caching,xmlhttprequest,Javascript,Rest,Firefox,Caching,Xmlhttprequest,我试图通过XHR访问REST服务器上的资源,因为我想下载它 <script type="text/javascript"> function iframe_onload (){ var xmlhttp=new XMLHttpRequest(); var url = "http://example.com/document/12345" xmlhttp.open("GET", url, true); xmlhttp.setRequ

我试图通过XHR访问REST服务器上的资源,因为我想下载它

 <script type="text/javascript">
     function iframe_onload (){

     var xmlhttp=new XMLHttpRequest();
     var url = "http://example.com/document/12345"

     xmlhttp.open("GET", url, true);
     xmlhttp.setRequestHeader("accept","application/pdf");

     xmlhttp.onload = function() {

     var oIFrm = document.getElementById('myIFrm');
     oIFrm.src = url; 

    };

    xmlhttp.send(null);
   }


<iframe id="myIFrm"  style="visibility:hidden" src="">  
</iframe>

函数iframe\u onload(){
var xmlhttp=new XMLHttpRequest();
变量url=”http://example.com/document/12345"
open(“GET”,url,true);
setRequestHeader(“接受”、“应用程序/pdf”);
xmlhttp.onload=函数(){
var oIFrm=document.getElementById('myIFrm');
oIFrm.src=url;
};
xmlhttp.send(空);
}
它在Chrome、Safari、IE上工作,但在FF上不工作,我在FF中检查了缓存,XHR的第一个请求以“anon&uri”开头,所以缓存键类似于“anon&uri=”,当前页面和url不在同一个域中,我为服务器设置了CORS,然后第二个请求无法从缓存中获取PDF文件,如果我把2台服务器放在同一个域下,缓存密钥是没有“anon&uri”的普通密钥,那么代码就正常工作了

当我在FF上为两台服务器设置CORS时,有人知道为什么缓存密钥以“anon&uri=”开头,以及如何避免这个问题并使代码正常工作吗

谢谢


Joey

您可以在url末尾附加一个时间戳,这样页面就不会被缓存:

var now=Date();
var heartbeat=now.getTime();
oIFrm.src = url+'?'+heartbeat;
同时将onload更改为onreadystatechange:

xmlhttp.onreadystatechange = function(){
  if (xmlhttp.readyState==4 && xmlhttp.status==200){
    var now=Date();
    var heartbeat=now.getTime();
    var oIFrm = document.getElementById('myIFrm');
    oIFrm.src = url+'?'+heartbeat;

  }
}
缓存键以“anon&”开头,因为它是一个匿名(不允许cookies,不允许http身份验证)请求,因此不应缓存在同一个缓存项中,作为对同一URI的正常请求

一般来说,如果缓存行为正常,则无法执行此处尝试执行的操作