2014-04-03 6 views
9

Bir yükleme formu uygulamaya çalışıyorum ve xhr kullanarak kullanıcıya geri dönmek için yükleme durumunu döndürüyorum. Her şey doğru bir şekilde uygulanıyor gibi görünüyor, ancak yükleme yaparken, geri bildirimler çok hızlı gerçekleşiyor ve gerçekte gerçekleşmiş olandan çok daha yüksek bir yüzdeye geri dönüyor.XMLHttpRequest ilerleme olayı gerçek yüklemeden çok daha hızlı ilerler

~ < 20Mb dosyalarında, yükleme işlemi arka planda bir süre için kaybolmaya devam ederken hemen% 99'unu gösteren bir geri arama alıyorum.

Konsolu bir 74Mb dosyasından gösteren aşağıdaki screengrab dosyasına bakın. Yükleme başlatıldıktan birkaç saniye sonra çekildi ve yükleme 60 saniye daha devam etti (sadece 3 geri arama kaydı (yüklenen toplam boyut) (hesaplanan yüzdelik) ve ajax yüklemesi ile devam ediyor.

Bunu deneyimleyen biri, yükleme durumunun doğru bir şekilde temsil edilmesini sağladı mı?

İşte

benim kod ('yük' olay yükleme işleminden sonra düzgün tetikler):

$(this).ajaxSubmit({ 
    target: '#output', 
    beforeSubmit: showRequest, 
    xhr: function() 
    { 
     myXhr = $.ajaxSettings.xhr(); 
     if (myXhr.upload) 
     { 
      console.log('have xhr'); 
      myXhr.upload.addEventListener('progress', function(ev){ 
       if (ev.lengthComputable) { 
        console.log(ev.loaded + " " + ev.total); 
        console.log((ev.loaded/ev.total) * 100 + "%"); 
       } 
      }, false); 

     } 
     return myXhr; 
    }, 
    dataType: 'json', 
    success: afterSuccess 
}); 

enter image description here

+3

Bu biraz garip gelebilir, ancak herhangi bir antivirüs yüklü mü? Varsa, antivirüs devre dışı bırakıldığında aynı davranış gözlenir mi? – raina77ow

+0

Önerilerinizde bununla ilgili bir şeyiniz olabilir. Ben sadece ilk kez (benim iş bilgisayarında dev oldu) ev sahibi makinem (mac, antivirüs) denedim ve bir çekicilik gibi çalışır! Antivirüsünü çalışma bilgisayarında devre dışı bırakmaya gideceğim ve bunun herhangi bir etkisi olup olmadığını göreceğim. Başları için büyük teşekkürler! – Fraser

+0

@ raina77ow Antivirüsün nedeni buna benziyor. İş makinemde devre dışı bıraktım ve şimdi harika çalışıyor. Teşekkürler. Cevabınızı aşağıda belirtin ve ödülünü vereceğim. – Fraser

cevap

7

aynı davranışın çeşitli raporlar vardır - hatalı ilerleme raporu dosya yükleme - yüklenecek dosyaları kontrol eden virüsten koruma yazılımı nedeniyle. Benim tahminim, antivirüsün bir kısmının olası bir gecikmeyi telafi etmeye çalışmasıdır (çek tarafından neden olunan) - ve bunu düzgün bir şekilde yapamamaktadır.

+0

Aynı sorun vardı, bu çözüldü. Umarım yakında bir iş bulabilirim. –

+1

Çevrenizde bir iş buldunuz mu? aynı problemim var ... – Benoit

1

Son zamanlarda aynı sorunu yaşadım. Ajax çağrınızın dosya yüklemelerinizden önce döndüğünü düşünüyorum. Bu yüklemeyi yüklemek için yüklediğiniz şeyi geri yükleyin ve load olayını kontrol edin. Eğer bir resim yükleyerek eğer Örneğin, (jQuery kullanarak): Dersin

var loadCheck = $('<img src="' + uploadedUrl +'">').hide().appendTo('body'); 
loadCheck.on('load', updateProgressBar()); 

diğer tip dosyalar üzerinde uygulamak ve bir $ .each iterasyon dahil edebilirsiniz.