アップロードされたバイト数については、非常に簡単です。xhr.upload.onprogressイベントを監視するだけです。ブラウザーは、アップロードする必要があるファイルのサイズとアップロードされたデータのサイズを知っているので、進行状況を提供できます。
ダウンロードされたバイト数(で情報を取得する場合)の場合xhr.responseText、サーバー要求で送信されるバイト数がブラウザーに認識されないため、少し難しいです。この場合、ブラウザが認識するのは、受信しているバイトのサイズだけです。
これには解決策がありContent-Lengthます。ブラウザーが受信するバイトの合計サイズを取得するには、サーバースクリプトにヘッダーを設定するだけで十分です。
詳細については、https://developer.mozilla.org/en/Using_XMLHttpRequestにアクセスしてください。
例:サーバースクリプトがzipファイルを読み取る(5秒かかります):
$filesize=filesize('test.zip');
header("Content-Length: " . $filesize); // set header length
// if the headers is not set then the evt.loaded will be 0
readfile('test.zip');
exit 0;
これで、サーバースクリプトのダウンロードプロセスを監視できます。これは、全体の長さがわかっているためです。
function updateProgress(evt) 
{
   if (evt.lengthComputable) 
   {  // evt.loaded the bytes the browser received
      // evt.total the total bytes set by the header
      // jQuery UI progress bar to show the progress on screen
     var percentComplete = (evt.loaded / evt.total) * 100;  
     $('#progressbar').progressbar( "option", "value", percentComplete );
   } 
}   
function sendreq(evt) 
{  
    var req = new XMLHttpRequest(); 
    $('#progressbar').progressbar();    
    req.onprogress = updateProgress;
    req.open('GET', 'test.php', true);  
    req.onreadystatechange = function (aEvt) {  
        if (req.readyState == 4) 
        {  
             //run any callback here
        }  
    };  
    req.send(); 
}