アップロードされたバイトの場合、それは非常に簡単です。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();
}