直到上传完成后XHR进度事件才会启动?

问题描述:

我用下面的$就命令上传从PhoneGap的应用程序的文件:直到上传完成后XHR进度事件才会启动?

function updateProgress(evt) { 
    if (evt.lengthComputable) { 
     var percentComplete = evt.loaded/evt.total * 100; 
     console.log(percentComplete + "%"); 
    } 
} 

$.ajax({ 
    url: url, 
    type: "POST", 
    data: data, 
    cache: false, 
    dataType: "json", 
    processData: false, 
    contentType: false, 
    success: successCallback, 
    error: errorCallback, 
    xhr: function() { 
     var xhr = new window.XMLHttpRequest(); 
     xhr.addEventListener("progress", updateProgress, false); 
     return xhr; 
    } 
}); 

上传工作正常。但是,一旦上传完成,进度事件只会触发一次。它在上传过程中并不实际触发 - 所以上传过程实际上并未显示。上传时只有暂停,然后显示100%。

任何想法我做错了什么?

+0

什么是文件的大小? – 2014-10-31 17:49:10

+1

你有没有尝试过:'xhr.upload.addEventListener(“progress”,updateProgress,false);'? – 2014-10-31 17:52:42

+0

文件大小是几兆字节 - 足够大以至于每秒需要上传1/2秒以上。将事件侦听器添加到xhr.upload中根本不会引发任何事情,即使完成也是如此。谢谢! – user1031947 2014-10-31 18:01:22

上传progress事件是在xhr.upload上触发的,因此请将侦听器附加到该侦听器上,而不是xhrxhr对象上也有progress事件,但这是针对从服务器返回的响应。

查看the MDN article了解更多详情。

xhr.upload.addEventListener('progress', updateProgress, false) 

(感谢A.沃尔夫和他的OP评论。)