Javascript 将“手工”响应放入缓存
我正在尝试向我的web应用程序添加一些脱机功能。在某些情况下,我希望从缓存中的请求/响应中获取数据,对其进行更改,然后将其作为新的请求/响应对添加回缓存 到目前为止,我已经能够从缓存中获取数据并对其进行修改,但是当我将其放入缓存时,我得到一个空的缓存条目内容长度:0。编辑:实际上,ChromeDeveloperTools在预览窗格中显示了正确的对象,但在缓存条目列表中显示内容长度:0,缓存时间:1/1/1970 0:59:59 然后,当尝试再次从缓存中获取它时,我得到一个不匹配错误,cache.match返回未定义 这就是我到目前为止所做的:Javascript 将“手工”响应放入缓存,javascript,caching,service-worker,Javascript,Caching,Service Worker,我正在尝试向我的web应用程序添加一些脱机功能。在某些情况下,我希望从缓存中的请求/响应中获取数据,对其进行更改,然后将其作为新的请求/响应对添加回缓存 到目前为止,我已经能够从缓存中获取数据并对其进行修改,但是当我将其放入缓存时,我得到一个空的缓存条目内容长度:0。编辑:实际上,ChromeDeveloperTools在预览窗格中显示了正确的对象,但在缓存条目列表中显示内容长度:0,缓存时间:1/1/1970 0:59:59 然后,当尝试再次从缓存中获取它时,我得到一个不匹配错误,cache.
return caches.open(CACHE_NAME).then(function(cache) {
return cache.matchAll().then(function(responses) {
var resp = responses[0].clone();
return resp.clone().json().then(function (datosResp) {
var nuevaMed = nuevaMedicionDesdeMedicion(datosResp);
var urlACachear = new URL('obra/' + nuevaMed.obraId + '/mediciones/' + nuevaMed.id, urlBase);
var nuevaMedJSON = JSON.stringify(nuevaMed);
var blob1 = new Blob([nuevaMedJSON], { type: "application/json;charset=utf-8" });
var myHeaders = new Headers(resp.headers);
var resACachear = new Response(blob1, { "status": 200, myHeaders });
return cache.put(urlACachear, resACachear.clone()).then(function() {
// Whatever...
});
});
});
});
有什么办法吗?甚至可以存储和正确检索我自己的请求和响应吗?缓存的时间:1/1/1970 0:59:59是已知的。我可以想象内容长度:0是同一个bug
您所描述的内容听起来像是您的新响应被正确地写入了缓存中,但您对匹配的调用有一些错误,这阻止了您查找缓存条目
作为一个快速的健全性检查,您可以在JS控制台中运行以下代码,以获得缓存中用作键的所有URL的列表。请确保看到希望缓存的URL打印出来,然后明确尝试使用其中一个URL执行匹配
const cache = await caches.open(CACHE_NAME);
const requests = await cache.keys();
const urls = requests.map(request => request.url);
console.log(urls):
很抱歉反应太晚。。。我不得不把这个放在一边一段时间。。。是的,不管日期和内容长度是否不正确,它似乎都正确地存储了,不匹配的问题是由于我试图匹配的URL中有一个双斜杠。。。