2014-10-31 6 views
5

Bir PhoneGap uygulamasından bir dosya yüklemek için aşağıdaki $ .ajax komutu kullanıyorum:XHR ilerleme olayı, yükleme tamamlanana kadar tetiklenmiyor mu?

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; 
    } 
}); 

yükleme çalışıyor. Bununla birlikte, ilerleme olayı, yükleme tamamlandıktan sonra yalnızca bir kez tetiklenir. Yükleme sırasında aslında ateş etmiyor - bu yüzden yükleme ilerlemesi gerçekten görüntülenmiyor. Yükleme yaparken sadece bir duraklama var ve sonra% 100 görüntüler.

Herhangi bir fikrim yanlış yaptığım şey nedir?

+0

dosyanın boyutu nedir? –

+1

Denediniz mi: xhr.upload.addEventListener ("progress", updateProgress, false); '? –

+0

Dosya boyutu, bir çift megabayttır; bu, yüklemenin 1/2 saniyeden daha uzun sürmesine yetecek büyüklüktedir. Olay dinleyicisini xhr.upload'a eklemek, hiçbir şeylerin bile tamamen bitmesine neden olmaz. Teşekkürler! – user1031947

cevap

10

Yüklemesi1 olayları xhr.upload numaralı telefona verildi, bu nedenle dinleyiciyi xhr yerine ekleyin. Ayrıca xhr nesnesinde progress olayları vardır, ancak bu sunucudan gelen yanıt içindir.

Daha fazla ayrıntı için bkz. the MDN article.

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

(A. Wolff sayesinde ve OP onun comment.)