2011-03-31 57 views
34

我正在使用XmlHttpRequests將圖像上傳到服務器,我想向用戶顯示這些上傳的進度。XmlHttpRequest onprogress間隔

不幸的是,調用我的onprogress-event處理程序之間的間隔太大。對於500k圖像,通常只對一次或兩次調用進行中。

這裏是我的代碼:

/* This function is not called often enough */ 
function progress(e){ 
    console.log('Uploading: ' + Math.round((e.loaded/e.total) * 100) + ' %'); 
} 

var xhr = new XMLHttpRequest(); 
xhr.upload.addEventListener('progress', progress, false); 
xhr.send(data); 

可這種行爲被改變或在某個地方硬編碼在瀏覽器中實現?

+0

這個怎麼樣? [如何從XMLHttpRequest取得進展](http://stackoverflow.com/questions/76976/how-to-get-progress-from-xmlhttprequest) – mplungjan 2011-03-31 06:07:20

+0

@mplungjan我的問題是沒有取得進展。我的問題是我的事件處理程序被調用的頻率。我已更新我的問題以澄清。 – Oscar 2011-03-31 07:50:12

+0

@Oscar - 我意識到,但是我發佈的線程有很多各種方式的示例 – mplungjan 2011-03-31 08:17:42

回答

30

W3在其XMLHttpRequest Level 2文件中列出了以下指導原則。顯然,不同瀏覽器之間的一致性水平是可以預料的。

上傳:

雖然請求實體正文被上傳並上傳完成標誌是假的,隊列的任務在XMLHttpRequestUpload對象火進度事件命名的進度約每50ms或每字節傳送,以最不頻繁的爲準。。 - W3 XMLHttpRequest的2級(粗體表示強調)

下載:

當說取得進展的通知,而下載的進展,隊列中的任務火有關進度事件命名的進步每50ms或每接收一個字節,以最不頻繁的爲準。 - W3 XMLHttpRequest Level 2(強調加粗)

我不知道用於定製此功能的api。

+3

謝謝,由於某種原因,我從來沒有發現過檢查規格 – Oscar 2011-04-05 04:04:18

+0

在3種不同的瀏覽器中嘗試過,看起來進度事件看起來像是進度條的百分比寬度。沒有觸發,直到從服務器接收到至少69個字節的數據爲止,然後可以每增加一個字節觸發一次,看起來瀏覽器按照這個標準行事,但是隻有在收到前69個字節後纔會觸發 – 2017-01-18 17:55:36

+0

@SamBull很高興知道!我一直在試圖弄清楚爲什麼我的10,9,8,...倒計時測試在完成之前不會觸發任何進度指示器! – Michael 2017-05-25 22:23:33

3

另外,請注意,本地調試HTTP代理(例如Charles)往往會影響進度事件觸發間隔。