2013-04-03 41 views
1

我正在嘗試使用ajax實現上傳百分比的標籤。問題是,在xhr返回100%之後,直到readyState == 4和status == 200需要大約17秒。XHR onProgress完成

我送使用FORMDATA圖像(PNG/JPG)和字符串()對象

<form onclick='send(this)'.... 

和功能是:

function send(form){ var f = new FormData(form)....... 

我使用下面的代碼上傳

if(xhr.upload) { 
    xhr.upload.onprogress = function(e) { 
     if (e.lengthComputable) { 
      var perc = Math.round((e.loaded/e.total) * 100); 
      var state = { 
       'done': e.loaded, 
       'total': e.total, 
       'percent': perc 
      }; 
      progress(state); 
     } 
    }; 
} 
+0

舊的方式...如果readystate!= 4它會是99% – zod 2013-04-03 23:58:14

+0

那麼這是完全正常的嗎?還是我做錯了什麼? – 2013-04-04 00:23:24

+0

它不正常。你應該滿足用戶。是嗎。如果它沒有真正結束,並且顯示100%不正確。所以顯示99%直到它結束。 – zod 2013-04-04 00:25:21

回答

2

這很可能是您的服務器的問題,而不是您的客戶端代碼。您的onreadystatechange處理程序將僅在服務器返回對基礎請求的響應後以readyState值4被調用。傳入您的onprogress處理程序的加載/總值指示已發送到服務器的字節數。如果總計===加載,這並不一定表示服務器已經返回響應。服務器可能在接收到最後一個字節後執行一些處理,然後返回響應(觸發onreadstatechange處理程序)。如果您在發送最後一個字節和調用您的處理程序之間注意了很長時間,則表明您的服務器無論出於何種原因都花時間響應請求。