2016-11-10 2 views

Antwort

7

@Vipul Panth hat hilfreiche Informationen, aber ich wollte ein paar vollständigere Informationen zur Verfügung zu stellen.

Beachten Sie zunächst, dass navigator.sendBeacon nicht in allen Browsern unterstützt wird. Weitere Informationen zu dieser Funktion sowie den derzeit unterstützten Browsern finden Sie unter MDN documentation.

Sie erstellen in der Tat ein Blob-Header zur Verfügung zu stellen. Hier ein Beispiel:

window.onunload = function() { 
    let body = { 
    id, 
    email 
    }; 
    let headers = { 
    type: 'application/json' 
    }; 
    let blob = new Blob([JSON.stringify(body)], headers); 
    navigator.sendBeacon('url', blob); 
}); 

navigator.sendBeacon wird eine POST-Anforderung mit den Content-Type-Request-Header senden auf, was auch immer in headers.type ist. Dies scheint der einzige Header zu sein, das Sie allerdings in einem Beacon gesetzt, pro W3C:

Die sendBeacon Methode Fähigkeit nicht bieten die Anforderungsmethode, bieten kundenspezifische Anforderungsheader oder ändern andere Verarbeitungseigenschaften der Anforderung anpassen und Antwort. Anwendungen, die nicht standardmäßige Einstellungen für solche Anforderungen erfordern, sollten die API [FETCH] mit dem keepalive-Flag true verwenden.

konnte ich einige beobachten, wie dies durch diese Chromium bug report gearbeitet.

+0

Ja, Sie sind völlig korrekt, da dies ein experimenteller Ansatz gemäß [docs] (https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon) ist und nur im neuesten Browser wie Chrom V39. –

+0

Korrigieren Sie mich, wenn ich falsch liege, aber Keepalive für Fetch ist noch nicht einmal in Chrome implementiert. https://groups.google.com/a/chromium.org/forum/#!topic/loading-dev/_F6oicQ3_F4 –

0

Nach dieser Frage Suche nach einer Antwort fand ich heraus, dass Header mit Navigator müssen wir Objekt zum Durchlassen eines Blob passieren.

Zum Beispiel

var hearders = {type : 'application/json'}; 
var blob = new blob(request , headers); 
navigator.sendBeacon('url/to/send',blob); 

Dank.

+0

Sie 'neuem blob' zu nutzen meinen, so dass es sein würde' neuer Blob? –

+0

Auch was ist "Anfrage"? Kannst du eine deiner Quellen nennen? –

+0

Die Anforderung, über die ich spreche, ist eine Liste mit Ticketdaten, die gesendet werden müssen, während der Browser zusammen mit einem Sicherheitsheader geschlossen wird, damit der Server die Nachricht als Autorisierungsanforderung erkennen kann. –

0

Wie im Processing Model of sendBeacon geschrieben:

Bytestrom des Extract-Objekt (transmittedData) und den Inhaltstyp (content).

Wie Extraktion durchgeführt wird, ist described here

Was ich gesammelt ist, dass der Inhaltstyp der übertragenen Daten extrahiert wird, und es wird als Content-Type der HTTP-Anforderung gesetzt.

1) Wenn ein Blob-Objekt gesendet wird, wird der Content-Type den Typ des Blob.

2) Wenn ein Formdata Objekt gesendet wird, wird der Content-Type multipart/form-data

3) wird, wenn ein URLSearchParams Objekt gesendet wird, wird der Content-Type-Anwendung/x-www-form-urlencoded

4) Wenn eine normale Zeichenfolge gesendet wird, wird der Content-Type text/plain

Javascript-Code verschiedene Objekte zu implementieren can be found here

Verwandte Themen