Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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 将“手工”响应放入缓存_Javascript_Caching_Service Worker - Fatal编程技术网

Javascript 将“手工”响应放入缓存

Javascript 将“手工”响应放入缓存,javascript,caching,service-worker,Javascript,Caching,Service Worker,我正在尝试向我的web应用程序添加一些脱机功能。在某些情况下,我希望从缓存中的请求/响应中获取数据,对其进行更改,然后将其作为新的请求/响应对添加回缓存 到目前为止,我已经能够从缓存中获取数据并对其进行修改,但是当我将其放入缓存时,我得到一个空的缓存条目内容长度:0。编辑:实际上,ChromeDeveloperTools在预览窗格中显示了正确的对象,但在缓存条目列表中显示内容长度:0,缓存时间:1/1/1970 0:59:59 然后,当尝试再次从缓存中获取它时,我得到一个不匹配错误,cache.

我正在尝试向我的web应用程序添加一些脱机功能。在某些情况下,我希望从缓存中的请求/响应中获取数据,对其进行更改,然后将其作为新的请求/响应对添加回缓存

到目前为止,我已经能够从缓存中获取数据并对其进行修改,但是当我将其放入缓存时,我得到一个空的缓存条目内容长度:0。编辑:实际上,ChromeDeveloperTools在预览窗格中显示了正确的对象,但在缓存条目列表中显示内容长度:0,缓存时间:1/1/1970 0:59:59

然后,当尝试再次从缓存中获取它时,我得到一个不匹配错误,cache.match返回未定义

这就是我到目前为止所做的:

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中有一个双斜杠。。。