progess
和load
个回调事件我在JavaScript文件中有以下内容作为我的WebWorker代码:
function uploadFile(url, m) {
var f = m.file;
var fd = new FormData();
fd.append('file', f, f.name);
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', function (e) {
m.set('status', (e.loaded / e.total) * 100 );
postMessage(m); // <-- never makes the call, doesn't throw and error either
});
xhr.upload.addEventListener('load', function (e) {
m.set('status',100);
postMessage(m); // <-- never makes the call, doesn't throw and error either
});
xhr.open('POST', url, true);
xhr.send(fd);
}
function getUploadURL(m) {
var xhr = new XMLHttpRequest();
xhr.addEventListener('load', function () {
var url = this.responseText;
uploadFile(url,m);
});
xhr.open('GET', '/upload', false);
xhr.send();
}
var q = [];
onmessage = function(e) {
postMessage(e.data);
q.push(e.data);
while (q.length > 0) {
var m = q.pop();
getUploadURL(m);
}
};
postMessage(e.data);
功能中的onmessage
完美无缺。
postMessage(m);
回调中的xhr.upload.addEventListeners()
永远不会发生。在我尝试将这些函数移动到WebWorker
代码之前,它们工作正常。
这是一个范围问题吗? 如果是这样,我该如何为调用加前缀以使它们起作用。?
为了完整起见,这里是我如何定义Worker
的实例并将其踢掉。
onButtonClick: function(button, e, eOpts) {
var ugv = this.getUploadGridView();
var fs = this.getFileUploadStore();
var worker = new Worker('/js/UploadFileWorker.js');
worker.onmessage = function(e) {
console.log(e);
};
var selected = ugv.getSelectionModel().getSelection();
Ext.each(selected, function(m) {
var o = {};
o.name = m.get('name');
o.size = m.get('size');
o.status = m.get('status');
o.file = m.file;
worker.postMessage(o);
});
},
postMessage();
回调中调用xhr
。答案 0 :(得分:0)
问题71433002:为Workers启用XHR上传进度事件。 (闭合)
xhr.addEventListener(
而不是
xhr.upload.addEventListener(
这样做的缺点是progress
只会为每个1MB
调用,小于1MB
的文件永远不会被progress
个事件触发。