2014-10-31 14 views
5

Używam następujące polecenia $ .ajax załadować plik z aplikacją PhoneGap:Zdarzenie postępu XHR nie jest uruchamiane, dopóki nie zakończy się przesyłanie?

function updateProgress(evt) { 
    if (evt.lengthComputable) { 
     var percentComplete = evt.loaded/evt.total * 100; 
     console.log(percentComplete + "%"); 
    } 
} 

$.ajax({ 
    url: url, 
    type: "POST", 
    data: data, 
    cache: false, 
    dataType: "json", 
    processData: false, 
    contentType: false, 
    success: successCallback, 
    error: errorCallback, 
    xhr: function() { 
     var xhr = new window.XMLHttpRequest(); 
     xhr.addEventListener("progress", updateProgress, false); 
     return xhr; 
    } 
}); 

Upload działa dobrze. Jednak zdarzenie progress uruchamia się tylko jeden raz, po zakończeniu przesyłania. W rzeczywistości nie uruchamia się podczas przesyłania - więc postęp przesyłania nie jest wyświetlany. Podczas przesyłania jest tylko pauza, a następnie wyświetla się w 100%.

Jakieś pomysły, co robię źle?

+0

co jest rozmiar pliku? –

+1

Czy próbowałeś: 'xhr.upload.addEventListener (" progress ", updateProgress, false);'? –

+0

Wielkość pliku to kilka megabajtów - na tyle duże, że przesłanie zajmuje więcej niż 1/2 sekundy. Dodanie detektora zdarzeń do xhr.upload nie powoduje niczego w ogóle, nawet po zakończeniu. Dzięki! – user1031947

Odpowiedz

10

Zdarzenia progress są wysyłane na xhr.upload, więc dołącz do nich słuchacza, a nie xhr. Zdarzają się również zdarzenia progress na obiekcie xhr, ale jest to związane z odpowiedzią przychodzącą z serwera.

Aby uzyskać więcej informacji, patrz the MDN article.

xhr.upload.addEventListener('progress', updateProgress, false) 

(Dzięki A. Wolff i jego komentarz na OP.)

Powiązane problemy