Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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 停止为依赖JSON的Java脚本缓存JSON_Javascript_Json_Ajax_Dom_Squarespace - Fatal编程技术网

Javascript 停止为依赖JSON的Java脚本缓存JSON

Javascript 停止为依赖JSON的Java脚本缓存JSON,javascript,json,ajax,dom,squarespace,Javascript,Json,Ajax,Dom,Squarespace,我已经建立了一个Squarespace网站使用的模板,有一个独特的砌体类型画廊-。选择这个模板几乎完全是因为这个图库布局,但在其他方面有几个缺点,我基本上是从头开始重建网站。我没有处于开发模式,所以请记住,我对代码的访问是有限的——我只能在页眉、页面上(但不是在图库中)和页脚中添加代码,但只能在站点范围内作为代码块添加代码我正在寻找解决此问题的理想方法,该方法只需在标题中添加代码即可 您将在上面的URL上看到预览的图库有一个不幸的问题,单击缩略图的默认操作是打开一个排序的灯箱-与大多数Squar

我已经建立了一个Squarespace网站使用的模板,有一个独特的砌体类型画廊-。选择这个模板几乎完全是因为这个图库布局,但在其他方面有几个缺点,我基本上是从头开始重建网站。我没有处于开发模式,所以请记住,我对代码的访问是有限的——我只能在页眉、页面上(但不是在图库中)和页脚中添加代码,但只能在站点范围内作为代码块添加代码我正在寻找解决此问题的理想方法,该方法只需在标题中添加代码即可

您将在上面的URL上看到预览的图库有一个不幸的问题,单击缩略图的默认操作是打开一个排序的灯箱-与大多数Squarespace“图库”类型的页面不同,您不能为每个缩略图分配超链接。请注意,您可以通过sqs面板设置此“Clickthrough URL”属性,但默认情况下,此属性将被忽略,并且仅打开一个lightbox

对于我们的网站,这些缩略图在单击时将您发送到项目页面是至关重要的。为了实现这一点,标题中包括以下脚本(从另一个sqs用户ghostcat处找到):

<script>
  var currentPageBaseURL=window.location.href.split("?")[0];
   Y.on("domready",function(e){
   Y.io(currentPageBaseURL+"?page=1&format=json-pretty", {
     on:{success: jsonLoaded}
  });
  function jsonLoaded(err,data){
  try{
   var jsonResponse = Y.JSON.parse(data.responseText);
   var items=jsonResponse.items
   Y.all("#thumbList .thumb, #galleryWrapper .slide").each(function(e){
     var thumbId=this.getAttribute("data-slide-id");
     for(var i=0;i<items.length;i++){
       if(thumbId==items[i].id && items[i].clickthroughUrl){
         this.setAttribute("data-clickthrough-url",items[i].clickthroughUrl).on("click",function(e){
           e.preventDefault();
           e.stopPropagation();
          window.open(this.getAttribute("data-clickthrough-url"),'_self');
         })
       }
     }
   })
   }catch(e){}
   }
   });
</script>

var currentPageBaseURL=window.location.href.split(“?”[0];
Y.on(“domready”,功能(e){
Y.io(currentPageBaseURL+“?page=1&format=json”{
在:{success:jsonload}
});
函数jsonLoaded(错误,数据){
试一试{
var jsonResponse=Y.JSON.parse(data.responseText);
var items=jsonResponse.items
Y.all(“#thumbList.thumb,#galleryWrapper.slide”)。每个(函数(e){
var thumbId=this.getAttribute(“数据幻灯片id”);
对于(var i=0;i www.website.com/work-041718)并设置一个301重定向,这是可行的,但是在库URL上附加一个日期感觉很笨拙

我是否可以对脚本/其他策略进行任何修改以解决此问题

很高兴以任何可能的方式澄清

编辑-我再次查看了inspector,注意到正在缓存一个XHR文件。此“文件”包含我将在面板中设置的所有图像属性,包括点击URL

也可以在www.website.com/galery-page?page=1&format=json上找到它

这使我认为这是问题所在,因为脚本正在这个XHR URL上运行函数


也许这有助于找到解决方案?

一个可能的原因(假设您的代码在.js文件中,而不是在标记中的脚本标记中)。如果此文件以前由用户下载,并且启用了缓存,浏览器将提供它保存的文件(与服务器上的文件相反),该文件仍将存在于请求中,但如果查看网络检查器,您应该能够看到该文件以及该文件是否来自缓存的源-典型情况下与几百个文件相比,缓存文件的运行速度要快得多(几毫秒)

这在大多数生产站点中都可以通过对文件进行哈希处理来解决,或者您也可以尝试使用


我唯一想到的另一件事是将您的javascript包含在DOM本身的脚本标记中,尽管这可能会带来一些其他可能发生的问题。这会起作用,因为您的html文件直接从服务器提供给客户端,并且通常不会缓存(尽管可以缓存)。如果您的代码位于标记中的脚本标记中,则您可能正在缓存服务器端,您需要在服务器上清除该标记。

脚本依赖于页面的JSON漂亮版本,可在www.website.com/gallery page?page=1&format=JSON漂亮。这是由浏览器缓存的,因此,脚本引用的是o过期的库项目列表和点击URL

添加此脚本(如上所述):


其中uriOfCachedPage=“”,似乎避免了缓存,并在有限的测试后解决了问题。

我尝试了这两种方法-在别处上传并调用一个.js文件,并将整个脚本直接插入到脚本标记的标题中。使用.js文件方法,即使在更新之间完全更改.js文件名,这种方法也会因新的thu而失败mbnails.在检查资源加载时,.js没有缓存在我的浏览器上,每次我加载页面时它都会被拉起。我确实获得了Squarespace来清除服务器端缓存并进行测试-仍然没有运气。请参阅我上面的编辑-我相信这就是问题所在。有什么建议吗?根据URL中的查询参数判断
?page=1&format=json pretty
正在以json格式提供页面资产。可能值得将json数据记录下来,然后查看您得到了什么。如果此json数据正在缓存,您对此无能为力-可能值得与squarespace讨论这一点。他们将比我拥有更多的知识。这似乎就是发生的事情ng-JSON数据正在从磁盘缓存加载。令人遗憾的是,这无法停止!似乎已修复-请参阅下面我的答案。
var xhr = new XMLHttpRequest();
xhr.open("GET", uriOfCachedPage, true);
xhr.setRequestHeader("Cache-Control", "max-age=0");
xhr.send();