2016-07-18 14 views
0

現在、サービスワーカーフェッチイベントを使用しています。フェッチAPIを使用して、サーバーにリクエストを送信してHTMLを取得します。私が実行している問題には、POSTリクエストが含まれています。 POSTがあるときにこれを実行しようとすると、POSTリクエストですべてのヘッダーが失われています(データを投稿用にサーバーに追加する必要があります)。手動でヘッダーを取得してフェッチに追加しようとしていますが、運が無ければありません。ここでフェッチイベントのために私の現在のコードされていますサービスワーカーのJavascriptで取得する

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] 

答えて

0

は「POST」にする方法を変更してみてくださいfetchOptionsForPostの "post"ではなく "

+0

次のエラーでショット、ことを与えた: ServiceWorker.js:52キャッチされない(約束で)例外TypeErrorは:「ServiceWorkerGlobalScope」on「にフェッチ」を実行できませんでした:そのモード「ナビゲートであるリクエストでリクエストを構築することはできません'と空ではないRequestInit。 at TypeError(ネイティブ) [サービス担当者のURL] –

+0

fetchOptionsForPostで "mode"を "no-cors"に設定してみてください。また、元のリクエストでinitオブジェクトを渡すのではなく、フェッチの新しいRequestを作成することもできます。 – crdumoul

+0

"no-cors"とフェッチの新しいリクエストを追加しようとしました。しかし、サーバーは "不正なデータ"エラーで応答しています。 –

関連する問題