2016-04-04 31 views
1

Dojo 1.10 kullanarak dosyaları sunucuya yüklüyorum. Yükleme için dojo/request/xhr modülünü kullanıyorum ve ilerlemeyi yüzdelerde göstermeye çalışıyorum. İlerlemenin geri dönüşünün sadece bir tanesiyle ve sadece transferin sonunda ateşlendiği konusunda kafam karıştı. Dosya başarıyla aktarıldı. Benim kod parçasını bakınız:Dojo 1.10 ve XHR: progress callback çağrılmadı

function uploadFile(){ 
    require([ 
    'dojo/dom', 
    'dojo/request/xhr' 
    ], function(dom, xhr) { 
    //... some unimportant code here 
    // Upload file now: 
    xhr(targetURL, { 
    handleAs: 'text', 
    method: 'POST', 
    headers: {'X-CSRF-Token': getAuthToken(), 'accept-charset': 'UTF-8'}, 
    data: formData 
    }).then(function(data){ 
     // Success => refresh file list 
     refreshDocList(); 
    }, function(err){ 
     // Failed 
     uploadFailed(err); 
    }, function(evt){ 
     // Progress of upload 
     console.log(evt); 
     dom.byId('progress').innerHTML = 'Done ' + (evt.loaded * 100/evt.total) + '%'; 
    }); 
    }); 
} 

ben FireFox (45.0.1 Windows 8.1), Chrome (49.0.2623.110 m Windows 8.1), MSIE (11.0.9600.18231 Windows 8.1), FireFox (bunu test 44.0, Ubuntu 15.04), Krom (48.0.2564.116, Ubuntu 15.04). Belirtilen tarayıcıların hiçbirinde ilerleme durumu geri bildirimi beklendiği gibi çağrılır. Sorunumu çözmek için herhangi bir ipucu?

+0

dosya ne kadar büyük karşıya olduğunu görüyor musunuz? İlerleme olayının kovulması için zamanın olmaması olabilir mi? Dojo kodunun bunun için kullanılışı şu şekildedir: https://github.com/dojo/dojo/blob/master/request/xhr.js#L141, eğer dojo'nun bir kaynak sürümünü kullanırsanız, – ben

+0

numaralı hata ayıklama bilgilerini ekleyebilirim küçük dosyalar ile birlikte büyük dosyalar (50MB üzeri) ile test edildi. Aynı davranış. –

cevap

1

Bu, dojo/istekte bunu yapmanın bir yolu gibi görünmüyor. Doğrudan XMLHttpRequest kullanmanız gerekir. Bunun nedeni, ilerleme olaylarının yalnızca indirme kısmı için yayımlanmasıdır. aşağıdaki gibi yükleme kısmı için, XHR nesnenin yükleme üyesini kullanmak gerekir:

var oReq = new XMLHttpRequest(); 

oReq.upload.addEventListener("progress", updateProgress); 
oReq.upload.addEventListener("load", transferComplete); 
oReq.upload.addEventListener("error", transferFailed); 
oReq.upload.addEventListener("abort", transferCanceled); 

oReq.open(); 

dojosu/istek/XHR'nin source code bakınca dojo almanın herhangi basit bir yolu vardır sanmıyorum XHR nesnesini açığa çıkarmak için/request/xhr (ve uzantısına göre yükleme üye). Bu nedenle muhtemelen doğrudan XMLHttpRequest kullanmanız gerekecektir. Daha fazla bilgi için

, https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest