Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMLHttpRequestonProgress间隔_Javascript_Ajax_Xmlhttprequest - Fatal编程技术网

Javascript XMLHttpRequestonProgress间隔

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)

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

不幸的是,调用onprogress事件处理程序的间隔太大。对于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);

这种行为是否可以更改,或者是否在浏览器实现中的某个位置进行了硬编码?

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触发。