2012-11-03 115 views
2

我工作的地方,我需要缓存某些请求HTML5缓存清单缓存请求清单不

所以我是用HTML5缓存

这里我的清单文件劳作应用定义

CACHE MANIFEST 
# 2d25a26de3a1148a2fa5e534325f84cca2184090174c6ba451451c54f71f52d6 
assets/application.js 
assets/application.css 
assets/glyphicons/png/glyphicons_064_lightbulb.png 
assets/jquery-mobile/ajax-loader.gif 
assets/jquery-mobile/icons-18-white.png 
application.manifest 

NETWORK: 
/project_show 
/application.manifest 

现在我有/projects_show页面内容看起来像这样

<div data-role="header" class="header"> 
</div> 

<div data-role="content" class="content"> 
</div> 

<div data-role="footer" class="footer" style="text-align:center"> 
</div> 

<script type="text/javascript"> 
    <%= store_key %> 
</script> 

<script id="header" type="text/template"> 
    <h1>Listing of {{ carName }}</h1> 
</script> 

<script id="content" type="text/template"> 
    <span>{{ pageName }}</span> 
</script> 

<script id="footer" type="text/template"> 
    <span> CopyRight &copy; {{ user }} </span> 
</script> 


<script type="text/javascript"> 

    $(document).ready(function() { 
     if (window.navigator.onLine) { 
       $.getJSON('/project/2.json',function(data) { 

        localStorage.setItem("acura",JSON.stringify(data)); 

         var carTemplate = $('#header').html(); 
         var pageTemplate = $('#content').html(); 
         var footerTemplate = $("#footer").html(); 
         $('div.header').html(Mustache.to_html(carTemplate, data)); 
        $('div.content').html(Mustache.to_html(pageTemplate, data)); 
       $('div.footer').html(Mustache.to_html(footerTemplate,data)); 

        }) 

     else { 
      var data = JSON.parse(localStorage.getItem("acura")) 
      var carTemplate = $('#header').html(); 
       var pageTemplate = $('#content').html(); 
       var footerTemplate = $("#footer").html(); 
      $('div.header').html(Mustache.to_html(carTemplate, data)); 
       $('div.content').html(Mustache.to_html(pageTemplate, data)); 
       $('div.footer').html(Mustache.to_html(footerTemplate,data)); 
     }    
    }) 
</script> 

可以看到的想法在这里是如果用户在网上从服务器获取的json响应,如果没有,那么从localStorage

获取数据不幸的是,上面的代码是不是因为工作,原因

一)缓存清单文件缓存ajax要求以及

现在一看到我还没有问HTML缓存清单缓存json要求

/projects/2.json

谁能告诉我为什么会这样

上面的代码工作正常,如果GET要求,如果修改为POST请求,即a POST request to /projects/2.json instead of GET

但是,这不是我“M在任何建议寻找

FYI清单确实按照清单文件正确,因为我还发现我的/projects越来越缓存,即使不manifest

定义
+0

我太面临这个问题,不知道是否可以通过'帖子'谢谢 – Viren

回答

0

尝试将/project/2.json添加到清单的NETWORK部分。然后,该URL的请求应始终从服务器而不是从appcache提供。

关于你/projects页面缓存得到:你绑定该页面这个应用程序缓存(通过在页面<html>元素的manifest="..."属性)?如果将页面绑定到appcache,页面本身总是隐式地作为appcache的一部分(作为所谓的“主条目”)。

+0

我可能是一个选项,但我相信它不会长期运行,因为问题也必须在rails中标记'ruby-on-rails''/ projects/2.json' 2可以被替换b Ÿ任何数字,如'/ projects/999.json'或'/ projects/1111。json'尝试设置每个条目都很难,也不可能达到 – Viren

+0

“NETWORK”节中的条目使用前缀匹配,因此如果添加'/ projects /',则可以匹配所有这些json URL。 –

0

这也让我发疯。我发现的工作是添加到清单“”index.html#content“的NETWORK部分。您的工作方式我认为您还需要添加”index.html#header“和”index.html#footer “

我认为发生了什么是index.html被缓存,”内容“”标题“和”页脚“是其中的一部分,因此调用加载这些部分(或在我的情况下页)被困并且ajax调用没有运行,因为index.html被缓存了。通过添加index.html#内容到NETWORK部分,它强制呼叫。