XmlHttpRequest onprogress间隔

时间:2011-03-31 05:21:36

标签: javascript ajax xmlhttprequest

我正在使用XmlHttpRequests将图像上传到服务器,我想向用户显示这些上传的进度。

不幸的是,对onprogress-event处理程序的调用之间的间隔太大。对于500k图像,通常只对onprogress调用一次或两次。

这是我的代码:

/* 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);

可以改变这种行为,还是在浏览器实现中将其硬编码?

2 个答案:

答案 0 :(得分:32)

W3在其XMLHttpRequest Level 2文档中阐述了以下准则。显然,跨浏览器的一致性水平会有所不同。

上传:

  

在上传请求实体主体并且上传完成标志为false时,将任务排队以在XMLHttpRequestUpload对象上触发一个名为progress的进度事件,该事件大约每隔50ms发送或发送的每个字节,以最不频繁的为准< / strong>即可。 - W3 XMLHttpRequest Level 2(重点强调)

下载:

  

当据说进行进度通知时,在下载正在进行时,将任务排队以触发名为进度的进度事件,该进度事件大约每隔50毫秒或接收到的每个字节,以最不频繁的为准。 - W3 XMLHttpRequest Level 2(重点强调)

我不知道api可以自定义此功能。

答案 1 :(得分:3)

另外,请注意本地调试HTTP代理(例如Charles)会影响发送间隔的进度事件。