यदि आप फ़ायरफ़ॉक्स का उपयोग कर रहे हैं (और मैं आईई के अलावा अन्य अधिकांश ब्राउज़रों को निश्चित रूप से सुनिश्चित करता हूं), तो यह रिपोर्ट करने का एक तरीका है कि एक्सएचआर ऑपरेशन के दौरान कितना डेटा स्थानांतरित किया गया है। यदि प्रश्न में ऑपरेशन सही हेडर भेजता है, तो डाउनलोड की गई डेटा के प्रतिशत की गणना करने के लिए इस जानकारी का उपयोग करना काफी आसान है।
मैंने इस कोड को कई वर्षों पहले एक्सएचआर ऑपरेशन में स्थानांतरित डेटा का प्रतिशत निर्धारित करने के लिए लिखा था, इसलिए मैं इसके लिए माफी माँगता हूं क्योंकि मैंने कोडिंग अनुभव के वर्षों को प्रतिबिंबित नहीं किया है। मैं लगभग निश्चित रूप से इसे इस तरह से नहीं लिखूंगा! फिर भी, मैं इसे मछली पकड़ने में कामयाब रहा, और उम्मीद है कि यह आपके लिए उपयोग की जाएगी।
जब यह लिखा गया था, आईई 7 एक्सप्लोरर का नवीनतम संस्करण उपलब्ध था, और मुझे याद है कि कोड उसमें काम नहीं करता है, इसलिए इसमें आईई के तहत प्रारंभ करने से रोकने के लिए कोड शामिल है। मैंने इस कोड को संस्करण 8 या संस्करण 9 के बीटा के तहत कभी भी कोशिश नहीं की है, और यह वास्तव में उन संस्करणों में भी काम कर सकता है, लेकिन मैं इसके लिए झुकाव नहीं कर सकता। यदि आप इसे IE के नए संस्करण में काम कर सकते हैं, तो कृपया मुझे बताएं!
यह जावास्क्रिप्ट अंतराल स्थापित करने के लिए पहले सेन्ड में कोड चलाने के द्वारा काम करता है (एक कॉलबैक jQuery जो कोड आप AJAX अनुरोध शुरू करने से पहले चलाने के लिए चाहते हैं) (कोड में मैंने 50 मिलीसेकंड लगाए हैं, जो शायद कहीं भी है अक्सर 200 मिलीसेकंड अभी भी पर्याप्त होना चाहिए, और सिस्टम पर कम तनाव डालना चाहिए)। प्रत्येक बार अंतराल टाइमर आग लगती है, यह एक फ़ंक्शन चलाती है जो प्रतिक्रिया को देखती है XHR अनुरोध की टेक्स्ट विशेषता। प्रतिक्रिया टेक्स्ट विशेषता में अब तक प्राप्त डेटा का कच्चा पाठ है। लंबाई() स्ट्रिंग विधि के साथ कितने वर्ण हैं, यह गिनकर, हम काम कर सकते हैं कि अब तक कितने बाइट एकत्र किए गए हैं।
जहां तक कुल डेटा के प्रतिशत को भेजने के लिए काम करना है, इसके लिए यह आवश्यक होगा कि आपका सर्वर साइड कोड सामग्री-लंबाई वाले शीर्षलेख को सटीक गिनती के साथ भेजता है कि यह कितने बाइट भेजने जा रहा है। इसके लिए आपके हिस्से पर थोड़ी चतुरता की आवश्यकता होगी, लेकिन यह बहुत मुश्किल साबित नहीं होना चाहिए। यदि आप एक सटीक सामग्री-लंबाई शीर्षलेख भेजते हैं, तो इसका उपयोग अब तक प्राप्त डेटा के प्रतिशत की गणना करने के लिए किया जाता है। यदि आप कोई सामग्री शीर्षलेख सेट नहीं करते हैं, तो इसके बजाय प्राप्त डेटा की मात्रा को इसके बजाय प्रदर्शित किया जाता है।
<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>
ऐसा करने के लिए एक दर्जन अलग-अलग तरीके हो सकते हैं। यह इस बात पर निर्भर करता है कि PHP स्क्रिप्ट क्या कर रही है, और आपके पास किस प्रकार की सर्वर साइड तकनीक है। क्या आप अधिक विशिष्ट हो सकते हैं? – mellowsoon
स्क्रिप्ट क्वेरी चल रहा है और एचटीएमएल कोड उत्पन्न करने के लिए डेटा का उपयोग कर रहा है, जो वर्तमान पृष्ठ पर xmlhttprequest प्रतिक्रिया हैंडलर सम्मिलित करता है। – Evan4623