首頁 > web前端 > js教程 > 主體

在不知道總檔案大小的情況下如何追蹤 XMLHttpRequest 中的下載進度?

Mary-Kate Olsen
發布: 2024-10-28 17:56:02
原創
123 人瀏覽過

How do you track download progress in XMLHttpRequest without knowing the total file size?

監控 XMLHttpRequest 的進度

XMLHttpRequest (XHR) 提供了一種從 JavaScript 執行非同步請求的機制。雖然它支援使用 xhr.upload.onprogress 事件追蹤上傳進度,但由於缺乏有關要接收的總位元組數的信息,獲取下載進度並不那麼簡單。

追蹤上傳進度

取得上傳進度比較簡單。瀏覽器維護有關正在上傳的檔案大小和傳輸的資料量的信息,從而可以透過 xhr.upload.onprogress 事件獲取進度。

監控下載進度

對於下載來說,挑戰來自於瀏覽器無法知道傳入資料的大小。但是,可以透過在伺服器回應中設定 Content-Length 標頭來克服這個問題,該標頭指定要傳輸的資料的總大小。

伺服器端設定

伺服器端負責交付內容的程式碼應依照正在下載的檔案或資料的大小設定 Content-Length 標頭。範例:

$filesize = filesize('test.zip');

header("Content-Length: " . $filesize); // Set header length
readfile('test.zip');
exit 0;
登入後複製

客戶端實作

設定Content-Length 標頭後,客戶端程式碼現在可以追蹤下載進度:

function updateProgress(evt) {
  if (evt.lengthComputable) {
    // evt.loaded: Bytes received by the browser
    // evt.total: Total bytes defined by the header
    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) {
      // Callback actions here
    }
  };
  req.send();
}
登入後複製

此程式碼使用jQuery UI 庫建立一個進度條,顯示接收資料時的進度百分比。透過利用 Content-Length 標頭,瀏覽器可以準確計算並顯示下載進度,這對於需要視覺進度指示器的大型檔案下載非常有用。

以上是在不知道總檔案大小的情況下如何追蹤 XMLHttpRequest 中的下載進度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!