直到上传完成后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%。
任何想法我做错了什么?
答
上传progress
事件是在xhr.upload
上触发的,因此请将侦听器附加到该侦听器上,而不是xhr
。 xhr
对象上也有progress
事件,但这是针对从服务器返回的响应。
查看the MDN article了解更多详情。
xhr.upload.addEventListener('progress', updateProgress, false)
(感谢A.沃尔夫和他的OP评论。)
什么是文件的大小? – 2014-10-31 17:49:10
你有没有尝试过:'xhr.upload.addEventListener(“progress”,updateProgress,false);'? – 2014-10-31 17:52:42
文件大小是几兆字节 - 足够大以至于每秒需要上传1/2秒以上。将事件侦听器添加到xhr.upload中根本不会引发任何事情,即使完成也是如此。谢谢! – user1031947 2014-10-31 18:01:22