2013-01-04 24 views
6

Mọi thứ trong mã sau sẽ hoạt động, ngoại trừ nó sẽ không bao giờ kích hoạt sự kiện xhr.upload.onprogress.xhr.upload.onprogress không hoạt động

$(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

Tôi nghĩ bạn phải xác định trình xử lý của mình trước khi các cuộc gọi mở. – VoidMain

+0

Ai đó tạo câu trả lời để tôi có thể chấp nhận nó. @VoidMain đã chính xác. – user1534664

+0

@ user1534664 xhr.upload.onprogress hoạt động tốt với IE nhưng không hoạt động với chrome và FF. Bạn có giải pháp nào không? Xin vui lòng chia sẻ ý kiến ​​của bạn –

Trả lời

13

Bạn nên tạo cho người nghe trước khi mở kết nối, như thế này:

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

Hy vọng rằng sẽ giúp.

+6

Bạn có thể mở kết nối trước khi xử lý, nhưng gửi cần phải được sau khi. – jcubic

+0

@jcubic Tôi xác nhận – Pawel

+0

Xin chào, tôi có mã tương tự như thế này nhưng không hoạt động trên ứng dụng dành cho thiết bị di động. http://stackoverflow.com/questions/38581293/upload-using-xmlhttprequest-not-working-on-mobile Xhr không hoạt động trên phản ứng js? –