2013-01-04 44 views
6

xhr.upload.onprogressイベントを発生させない点を除いて、次のコードのすべてが機能します。xhr.upload.onprogressが機能しない

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

オープンするコールの前にハンドラを定義する必要があると思います。 – VoidMain

+0

誰かが答えを作成するので、私はそれを受け入れることができます。 @ VoidMainは正しい。 – user1534664

+0

@ user1534664 xhr.upload.onprogressはIEで正常に動作しますが、chromeとFFでは動作しません。何か解決策はありますか?あなたのコメントを共有してください –

答えて

13

あなたはこのように、接続を開く前にリスナーを作成する必要があります。

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

お役に立てば幸いです。

+6

ハンドラの前に接続を開くことができますが、送信する必要があります。 – jcubic

+0

@jcubic私は – Pawel

+0

を確認します。こんにちは、私はこのようなコードを持っていますが、モバイルアプリでは動作しません。 http://stackoverflow.com/questions/38581293/upload-using-xmlhttprequest-not-working-on-mobile xhrは反応するjsで動作しませんか? –