Javascript XMLHttpRequestonProgress间隔
我使用XmlHttpRequests将图像上传到服务器,我想向用户展示这些上传的进度 不幸的是,调用onprogress事件处理程序的间隔太大。对于500k映像,通常只调用onprogress一次或两次 这是我的密码:Javascript XMLHttpRequestonProgress间隔,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我使用XmlHttpRequests将图像上传到服务器,我想向用户展示这些上传的进度 不幸的是,调用onprogress事件处理程序的间隔太大。对于500k映像,通常只调用onprogress一次或两次 这是我的密码: /* This function is not called often enough */ function progress(e){ console.log('Uploading: ' + Math.round((e.loaded / e.total) * 100)
/* 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);
这种行为是否可以更改,或者是否在浏览器实现中的某个位置进行了硬编码?W3在其文档中规定了以下准则。显然,不同浏览器之间的一致性水平是不同的 上载: 在上载请求实体主体且上载完成标志为false时,将任务排队,以大约每隔50ms或每传输一个字节(以频率最低的为准),在XMLHttpRequestUpload对象处触发名为progress的进度事件W3 XMLHttpRequest级别2(粗体强调) 下载: 如果说在下载过程中发出进度通知,请将任务排队,每50毫秒或每收到一个字节(以频率最低的为准)触发一个名为progress的进度事件W3 XMLHttpRequest级别2(粗体强调)
我不知道有什么api可以自定义此功能。另外,请注意,本地调试HTTP代理(例如Charles)可能会影响进度事件触发间隔 这个怎么样@我的问题是没有取得进展。我的问题是调用事件处理程序的频率。我已经更新了我的问题以澄清。@Oscar-我意识到,尽管我发布的线程有很多不同方式的示例,但我还没有测试它,但是有一个jQuery插件使用PHP uploadprogress模块,它也可以显示进度。也许有帮助。我想它会变得有点复杂,但可能值得一试。您在哪些浏览器中测试过它?谢谢。由于某些原因,我从未想过检查规格。在3种不同的浏览器中进行了尝试后,似乎在从服务器接收到至少69字节的数据之前不会触发进度事件。之后,每增加一个字节就可以触发它。浏览器似乎是按照这个标准运行的,但只有在接收到前69个字节后才会运行。@SamBull这很好!我一直绞尽脑汁想弄明白为什么我的10,9,8。。。倒计时测试在完成之前不会触发任何进度指示器@SamBull嗯,不幸的是,即使我发送100个字节,然后每秒发送一个字节,持续10秒,我仍然无法获得任何进度指标,直到所有内容都传输完毕!好的,在过去几周的测试中,Chrome似乎已经改变了行为,现在需要1024字节。我已经调整了脚本,所以您可以查看浏览器是否在69或1024触发。