2016-06-14 9 views
1

Ich benutze diesen Befehl in in Service Worker holenWie kann ich die POST http-Methode mit Service Worker verwenden?

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

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

aber ich bekomme diese Fehlermeldung:

Uncaught (in Versprechen) Typeerror: Fehler 'holen' auf 'ServiceWorkerGlobalScope' auszuführen: konstruieren kann keine Anfrage mit einer Anfrage, deren Modus "navigieren" ist, und einem nicht leeren RequestInit.

Was soll ich tun?

+0

Was ist die Art der Veranstaltung? – sp1rs

Antwort

2

Basierend auf dem von Ihnen bereitgestellten Beispielcode sieht es so aus, als ob Sie nur das Standardverhalten "Vorgeben - wie-kein-Service-Mitarbeiter" implementieren möchten, wenn Sie das Ereignis fetch für eine POST Anfrage behandeln.

Der einfachste Weg, dies zu tun ist, einfach event.respondWith() an erster Stelle nicht zu rufen. Der Aufruf von event.respondWith() ist optional, und wenn Sie ihn nicht in einem fetch-Handler aufrufen, sucht der Service-Mitarbeiter nach anderen registrierten fetch-Handlern und gibt ihnen die Möglichkeit, zu antworten.

Wenn keiner der Ereignishandler fetch antwortet, wird die Anforderung entweder über den Browser-Cache (abhängig von den Anforderungsheadern und dem Status des Caches) oder über das Netzwerk erfüllt, so als ob keine Service-Mitarbeiter beteiligt wären.

Wenn aus irgendeinem Grund, die Sie wirklich brauchen `event.respondWith() aufrufen, aber Sie wollen das Standardverhalten imitieren, dann

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

verwenden, sollten arbeiten, das heißt auslassen die {method: 'post'} Bit. Die event.request weiß bereits, dass es eine POST ist, so dass es nicht notwendig ist, etwas anderes an fetch() weiterzugeben, um es zu sagen.