sonra gerçekten de bir XHR operasyon sırasında aktarıldıktan ne kadar veri rapor etmenin bir yolu yoktur. Söz konusu işlem doğru başlığı gönderirse, indirilen verilerin yüzdesini hesaplamak için bu bilgiyi kullanmak oldukça kolaydır.
yıllar önce bir XHR operasyonda aktarılan verilerin yüzdesini belirlenmesi için bu kodu yazdım, bu yüzden o zamandan beri elde ettik deneyim kodlama yıllarca yansıtmıyor için özür dileriz. Hemen hemen kesinlikle bu şekilde yazmazdım! Yine de, onu balık tutmayı başardım ve umarım senin için kullanırım. Bu yazıldığı anda
, IE7 mevcut Explorer'ın son sürümü olduğunu ve dolayısıyla bu IE altında başlatılıyor önlemek için kodu içeren ben, kod bu işe yaramadı hatırlıyorum. Bu kodu hiçbir zaman sürüm 8 veya sürüm 9'un beta sürümünde denemedim ve gerçekten bu sürümlerde de çalışabilir, ancak bunun için kefil olamaz. Eğer IE'nin yeni bir sürümünde çalışıyorsanız, lütfen bana bildirin!
Daha önce kodu çok uzun olan bir kod aralığı oluşturmak için (bir ajax isteğini başlatmadan önce çalıştırmak istediğiniz kod için bir geri arama jQuery kodu) beforeSend'de kod çalıştırarak çalışır (kodda 50 milisaniye koydum) Sık sık 200 milisaniye hala bol olmalı ve sisteme daha az zorlanmalıdır. Aralık zamanlayıcısı her tetiklendiğinde, XHR isteğinin responseText özniteliğine bakan bir işlevi çalıştırır. ResponseText özniteliği, şimdiye kadar alınan verilerin ham metnini tutar. Length() string yöntemiyle kaç karakterin bulunduğunu sayarak, bugüne kadar kaç bayt toplandığını araştırabiliriz.
Bildiğim kadarıyla toplam verilerin yüzdesini çalışma dışarı gönderilmek üzere gibi bu sunucu tarafı kod gönderecek kaç bayt doğru sayımına sahip bir içerik uzunlukta başlığını gönderdiğini gerektirecektir. Bu sizin tarafınızdan küçük bir zekilik gerektirecektir, ancak çok zor kanıtlanmamalıdır. Doğru bir içerik uzunluğu üstbilgisi gönderirseniz, o zamana kadar alınan verilerin yüzdesini hesaplamak için kullanılır. İçerik başlığı ayarlamazsanız, o zamana kadar alınan veri miktarı görüntülenir.
<script type="text/javascript">
$.ajax ({
beforeSend : function (thisXHR)
{
// IE doesn't support responseText access in interactive mode
if (!$.browser.msie)
{
myTrigger = setInterval (function()
{
if (thisXHR.readyState > 2)
// When there is partial data available use it to determine how much of the document is downloaded
{
var dlBytes = thisXHR.responseText.length;
if (totalBytes == -1)
totalBytes = thisXHR.getResponseHeader ('Content-length');
(totalBytes > 0)?
$('#progress').html (Math.round ((dlBytes/totalBytes) * 100) + "%"):
$('#progress').html (Math.round (dlBytes/1024) + "K");
}
}, 50); // Check the status every 50 miliseconds
}
},
complete : function()
{
// Kill the download progress polling timer
if (myTrigger)
clearInterval (myTrigger);
}
});
</script>
bunu yapmanın bir düzine farklı yolları vardır olabilir. Bu, PHP betiğinin ne yaptığına ve ne tür bir sunucu tarafı teknolojisine sahip olduğunuza bağlıdır. Daha spesifik olabilir misin? – mellowsoon
Komut dosyası, sorguları çalıştırıyor ve xmlhttprequest yanıt işleyicisinin geçerli sayfaya eklediği html kodu oluşturmak için verileri kullanıyor. – Evan4623