2013-01-04 9 views
6

Wszystko w poniższym kodzie będzie działać, z wyjątkiem tego, że nigdy nie wystrzeli zdarzenia xhr.upload.onprogress.xhr.upload.onprogress nie działa

$(function(){ 

    var xhr; 

    $("#submit").click(function(){ 
     var formData = new FormData(); 
     formData.append("myFile", document.getElementById("myFileField").files[0]); 
     xhr = new XMLHttpRequest(); 
     xhr.open("POST", "./test.php", true); 
     xhr.send(formData); 

     xhr.onreadystatechange = function(){ 
      if(xhr.readyState === 4 && xhr.status === 200){ 
       console.log(xhr.responseText);    
      } 
     } 

     xhr.upload.onprogress = function(e) { 
      // it will never come inside here 
     } 
    }); 
}); 
+1

Myślę, że musisz zdefiniować swoje procedury obsługi przed wywołaniem otwierania. – VoidMain

+0

Ktoś tworzy odpowiedź, więc mogę ją zaakceptować. @VoidMain był poprawny. – user1534664

+0

@ user1534664 xhr.upload.onprogress działa poprawnie z IE, ale nie działa z chrome i FF. Masz jakieś rozwiązanie? Proszę podzielić się swoimi komentarzami –

Odpowiedz

13

Należy utworzyć słuchaczy przed otwarciem połączenia tak:

$(function(){ 

    var xhr; 

    $("#submit").click(function(){ 
     var formData = new FormData(); 
     formData.append("myFile", document.getElementById("myFileField").files[0]); 
     xhr = new XMLHttpRequest(); 

     xhr.onreadystatechange = function(){ 
      if(xhr.readyState === 4 && xhr.status === 200){ 
       console.log(xhr.responseText);    
      } 
     } 

     xhr.upload.onprogress = function(e) { 
      // it will never come inside here 
     } 

     xhr.open("POST", "./test.php", true); 
     xhr.send(formData); 
    }); 
}); 

nadzieję, że pomoże.

+6

Możesz otworzyć połączenie przed obsługą, ale musisz wysłać wiadomość później. – jcubic

+0

@jcubic Potwierdzam: – Pawel

+0

Witam, mam podobny kod, ale nie działa on w aplikacji mobilnej. http://stackoverflow.com/questions/38581293/upload-using-xmlhttprequest-not-working-on-mobile Czy xhr nie działa na reakcję js? –