Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Menjejaki Kemajuan Pemindahan Data dalam XMLHttpRequest?

Bagaimanakah Saya Boleh Menjejaki Kemajuan Pemindahan Data dalam XMLHttpRequest?

Patricia Arquette
Patricia Arquetteasal
2024-10-29 10:02:02429semak imbas

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

Memantau Kemajuan dalam XMLHttpRequest

XMLHttpRequest membenarkan aplikasi web menghantar dan menerima data secara tidak segerak. Adakah mungkin untuk menjejak kemajuan XMLHttpRequest, khususnya bait yang dimuat naik dan dimuat turun?

Bait Dimuat Naik

Mendapatkan kemajuan bait yang dimuat naik adalah agak mudah. Gunakan acara xhr.upload.onprogress. Penyemak imbas mengira kemajuan dengan membandingkan saiz data yang dimuat naik dengan jumlah saiz fail.

Bait Dimuat turun

Memantau kemajuan bait yang dimuat turun adalah lebih mencabar kerana pelayar biasanya tidak tahu jumlah saiz respons. Penyelesaian melibatkan menetapkan pengepala Panjang Kandungan pada skrip sebelah pelayan untuk menunjukkan jumlah saiz respons. Ini membolehkan penyemak imbas mengira kemajuan muat turun.

Contoh

Pertimbangkan skrip pelayan yang membaca dan menghantar fail zip dengan saiz yang diketahui:

<?php
$filesize = filesize('test.zip');
header("Content-Length: " . $filesize);
readfile('test.zip');
?>

Kod JavaScript di bawah kemudiannya boleh memantau kemajuan muat turun menggunakan pengepala Panjang Kandungan:

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

Penyelesaian ini membolehkan anda memantau kemajuan muat turun walaupun untuk fail besar yang mengundi pelayan untuk kemas kini tidak ideal.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjejaki Kemajuan Pemindahan Data dalam XMLHttpRequest?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn