> 웹 프론트엔드 > JS 튜토리얼 > XMLHttpRequest에서 데이터 전송 진행 상황을 어떻게 추적할 수 있나요?

XMLHttpRequest에서 데이터 전송 진행 상황을 어떻게 추적할 수 있나요?

Patricia Arquette
풀어 주다: 2024-10-29 10:02:02
원래의
399명이 탐색했습니다.

How Can I Track the Progress of Data Transfer in XMLHttpRequest?

XMLHttpRequest의 진행 상황 모니터링

XMLHttpRequest를 사용하면 웹 애플리케이션이 데이터를 비동기적으로 보내고 받을 수 있습니다. XMLHttpRequest의 진행 상황, 특히 업로드 및 다운로드된 바이트를 추적할 수 있습니까?

업로드된 바이트

업로드된 바이트의 진행 상황을 가져오는 것은 비교적 간단합니다. xhr.upload.onprogress 이벤트를 활용하세요. 브라우저는 업로드된 데이터 크기를 전체 파일 크기와 비교하여 진행률을 계산합니다.

다운로드된 바이트

다운로드된 바이트의 진행률을 모니터링하는 것은 일반적으로 브라우저이므로 더 어렵습니다. 전체 응답 크기를 모릅니다. 해결 방법은 총 응답 크기를 나타내기 위해 서버 측 스크립트의 Content-Length 헤더를 설정하는 것입니다. 이를 통해 브라우저는 다운로드 진행률을 계산할 수 있습니다.

알려진 크기의 zip 파일을 읽고 보내는 서버 스크립트를 생각해 보세요.

<?php
$filesize = filesize('test.zip');
header("Content-Length: " . $filesize);
readfile('test.zip');
?>
로그인 후 복사

아래 JavaScript 코드는 Content-Length 헤더를 사용하여 다운로드 진행 상황을 모니터링할 수 있습니다.

<code class="javascript">function updateProgress(evt) {
   if (evt.lengthComputable) {
      // evt.loaded: Bytes received by the browser
      // evt.total: Total bytes specified in 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) 
        {  
             //run any callback here
        }  
    };  
    req.send(); 
}</code>
로그인 후 복사

이 솔루션을 사용하면 업데이트를 위해 서버를 폴링하는 대용량 파일의 경우에도 다운로드 진행 상황을 모니터링할 수 있습니다. 이상적이지 않습니다.

위 내용은 XMLHttpRequest에서 데이터 전송 진행 상황을 어떻게 추적할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿