2016-06-14 1 views
1

Я использую эту команду в выборку в Service WorkerКак использовать метод POST http с Service Worker?

if (event.request.method =='POST') { 

     event.respondWith(fetch(event.request,{method: 'post'})); 
     return; 
    } 

, но я получаю эту ошибку:

Uncaught (обещанию) TypeError: Не удалось выполнить «загрузить» на «ServiceWorkerGlobalScope»: Не удается построить запрос с запросом, в режиме которого «navigate» и непустым RequestInit.

Что мне делать?

+0

Что такое мероприятие? – sp1rs

ответ

2

Основываясь на примере кода, который вы предоставляете, похоже, что вы хотите просто реализовать поведение по умолчанию, притворяться как-нет-сервис-работника, когда вы обрабатываете событие fetch для запроса POST.

Самый простой способ сделать это - просто не звонить event.respondWith() в первую очередь. Вызов event.respondWith() не является обязательным, и если вы не вызываете его в обработчике fetch, сервисный работник будет искать любые другие зарегистрированные обработчики fetch и дать им возможность ответить.

Если ни один из обработчиков событий fetch не отвечает, запрос будет выполняться через кеш браузера (в зависимости от заголовков запроса и состояния кэша) или сети, точно так же, как если бы не было задействован сервис-работник.

Если по каким-то причинам, вам действительно нужно вызвать `event.respondWith(), но вы хотите, чтобы имитировать поведение по умолчанию, а затем с помощью

event.respondWith(fetch(event.request)); 

должны работать, т.е. оставить из {method: 'post'} немного. event.request уже знает, что это POST, поэтому нет необходимости передавать что-либо еще в fetch(), чтобы сказать это.