44 Stimmen

XmlHttpRequest onprogress Intervall

Ich verwende XmlHttpRequests, um Bilder auf einen Server hochzuladen, und ich möchte dem Benutzer den Fortschritt dieser Uploads anzeigen.

Leider ist das Intervall zwischen den Aufrufen meines onprogress-event-Handlers zu groß. Normalerweise wird onprogress nur ein- oder zweimal für ein 500k-Bild aufgerufen.

Hier ist mein Code:

/* This function is not called often enough */
function progress(e){
    console.log('Uploading: ' + Math.round((e.loaded / e.total) * 100) + ' %');
}

var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', progress, false);
xhr.send(data);

Kann dieses Verhalten geändert werden oder ist es irgendwo in der Browser-Implementierung fest einprogrammiert?

41voto

Matt Bierner Punkte 48241

Die W3 legt in ihrem Dokument folgende Leitlinien fest XMLHttpRequest Stufe 2 Dokument. Natürlich sind unterschiedliche Konformitätsniveaus bei den verschiedenen Browsern zu erwarten.

Uploads:

Während der Anforderungsentität Körper hochgeladen wird und die Upload abgeschlossen Flagge falsch ist, eine Aufgabe in die Warteschlange, um ein Fortschrittsereignis namens Fortschritt am XMLHttpRequestUpload-Objekt über auslösen alle 50 ms oder für jedes übertragene Byte, je nachdem, was am seltensten vorkommt . - W3 XMLHttpRequest Level 2 (fett gedruckt zur Hervorhebung)

Downloads:

Wenn es heißt, dass Fortschrittsmeldungen gemacht werden sollen, stellen Sie während des Downloads eine Aufgabe in die Warteschlange, um ein Fortschrittsereignis namens progress about alle 50 ms oder für jedes empfangene Byte, je nachdem, was seltener vorkommt . - W3 XMLHttpRequest Level 2 (fett gedruckt zur Hervorhebung)

Mir ist keine API bekannt, mit der diese Funktion angepasst werden kann.

3voto

user574535 Punkte 81

Achten Sie auch darauf, dass lokale Debugging-HTTP-Proxys (wie z. B. Charles) dazu neigen, das Auslöseintervall von Fortschrittsereignissen zu beeinflussen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X