2013-01-11 87 views
0

可能重複:
How to get progress from XMLHttpRequestXMLHttpRequest的文件下載

totalI我試圖下載使用XMLHttpRequest 1MB的文件,並檢查下載時間帶寬測量。但是,下面的代碼給了我從服務器的響應時間。它不會等到所有文件加載完畢。

var start = new Date().getTime(); 
(function rec() { 
var xmlHttp = new XMLHttpRequest(); 
xmlHttp.open('GET', "https://www.example.com/test/dummyFile1024kb", true); 
xmlHttp.setRequestHeader("Cache-Control", "no-cache"); 
xmlHttp.onreadystatechange = function() { 
    if (xmlHttp.readyState == 4) { 
     var total=(new Date() - start)    
     alert(total)  
     }; 
     xmlHttp.send(null); 
    })(); 

我應該怎麼做才能下載所有文件?歡迎任何其他建議。

+0

@leepowers - nope。 OP不要求中間進度事件,只是爲什麼當請求看起來完成時,他的時間計算不起作用。 – broofa

+0

當您的警報觸發時,xmlHttp.status和xmlHttp.responseText.length會顯示什麼?在響應完全加載之前,我從未見過readyState = 4,除非出現某種錯誤或請求被中斷。 – broofa

回答

1

xmlHttp.send(null);不應該在你的onreadystatechange函數裏面,而應該在它之後。在正在進行的XHR請求中調用send()將導致未指定的行爲,如果不是徹底的錯誤。而且它在你的readystatechange處理程序中的事實意味着你有一些其他的代碼沒有被顯示,調用xmlHttp.send(),否則這個處理程序永遠不會被調用(並且你的警報永遠不會被觸發)。

I.e.我想你想要的是:

(function rec() { 
    var start = new Date().getTime(); 
    var xmlHttp = new XMLHttpRequest(); 
    xmlHttp.open('GET', "https://www.example.com/test/dummyFile1024kb", true); 
    xmlHttp.setRequestHeader("Cache-Control", "no-cache"); 
    xmlHttp.onreadystatechange = function() { 
    if (xmlHttp.readyState == 4) { 
     var total=(new Date() - start)    
     alert(total)  
    }; 
    }; 
    xmlHttp.send(null); 
})(); 
+1

感謝您的回答,但我仍然得到相同的結果。 – user1874941