【问题标题】:Fetching in Javascript in Service Worker在 Service Worker 中获取 Javascript
【发布时间】:2016-11-21 12:25:54
【问题描述】:

我目前正在尝试使用 service worker fetch 事件,使用 fetch API 向服务器发送请求并获取 HTML。我遇到的问题涉及 POST 请求。当我在有 POST 时尝试执行此操作时,我会丢失 POST 请求中的所有标头(需要将数据添加到服务器以获取帖子)。我正在尝试手动抓取标题并将它们添加到提取中,但没有任何运气。这是我当前的 fetch 事件代码:

self.addEventListener("fetch", function(event) {

    var acceptHeader = event.request.headers.get('Accept');
    //fetch options used for post requests
    var fetchOptionsForPost = {
        method: "post",
        headers: event.request.headers,
        credentials: event.request.credentials
    }


    //if it's a post request, 
    if( acceptHeader.indexOf('text/html') > -1 && event.request.method == "POST" ) {    
        var updatedFetch = fetch( event.request, fetchOptionsForPost).then(function(updatedResponse) {
            //do something with response here.
        });
    }
});

更新:

试一试 crdumoul 的建议并给出以下控制台错误:

ServiceWorker.js:52 Uncaught (in promise) TypeError: Failed to execute 'fetch' on 'ServiceWorkerGlobalScope': Cannot construct a Request with a Request whose mode is 'navigate' and a non-empty RequestInit.
    at TypeError (native)
    at [URL to service worker]

【问题讨论】:

    标签: javascript fetch service-worker


    【解决方案1】:

    尝试在 fetchOptionsForPost 中将方法更改为“POST”而不是“post”。

    【讨论】:

    • 试一试,出现以下错误:ServiceWorker.js:52 Uncaught (in promise) TypeError: Failed to execute 'fetch' on 'ServiceWorkerGlobalScope': Cannot construction a Request with a Request 其模式是“导航”和非空 RequestInit。在 TypeError (native) at [URL to service worker]
    • 尝试在 fetchOptionsForPost 中将“mode”设置为“no-cors”。此外,您可以尝试为 fetch 创建一个新请求,而不是只使用原始请求传入一个 init 对象。
    • 我确实尝试添加“no-cors”和一个新的获取请求。但是服务器现在正在响应“格式错误的数据”错误。
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    相关资源
    最近更新 更多