Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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 在Firefox中使用XMLHttpRequest获取上传进度数据_Javascript_Firefox_Upload_Xmlhttprequest_Progress - Fatal编程技术网

Javascript 在Firefox中使用XMLHttpRequest获取上传进度数据

Javascript 在Firefox中使用XMLHttpRequest获取上传进度数据,javascript,firefox,upload,xmlhttprequest,progress,Javascript,Firefox,Upload,Xmlhttprequest,Progress,我正在尝试显示文件上载的进度报告。以下功能在Chrome中正常工作: function loading() { var XHR = new XMLHttpRequest(); if (XHR.upload) { XHR.upload.addEventListener('progress', function(event) { var bar = document.getElementById('bar'); var howfar = Math.

我正在尝试显示文件上载的进度报告。以下功能在Chrome中正常工作:

function loading() {     
  var XHR = new XMLHttpRequest();
  if (XHR.upload) { 
    XHR.upload.addEventListener('progress', function(event) {
      var bar = document.getElementById('bar');
      var howfar = Math.round((event.loaded / event.total) * 100);
      bar.value = howfar;
    }, false);
  }   
  XHR.onreadystatechange=function() {
    if (XHR.readyState==4 && XHR.status==200) {
       document.getElementById('formdiv').innerHTML=XHR.responseText;
    }
  }  
  var form = document.getElementById('updoc');
  var formdata = new FormData(form);
  XHR.open('post', 'progress.php', true)
  XHR.send(formdata);
}
但是,只有在包含以下代码时,它才能在Firefox中工作:

XHR.addEventListener('loadstart', function() {
  alert('Loading: please wait');
});
在这种情况下,除非在javascript警报框中单击OK,否则将显示进度。 上传本身总是成功的。 Firefox在这方面是否存在已知问题?我在Linux上使用Firefox25.0,但在Windows上使用Firefox也会发生同样的事情。
关于堆栈溢出这个主题的许多问题的答案都将提问者引向jQuery解决方案,我知道其他方法也是可能的,但由于代码在Chrome中正常工作,并且遵循Mozilla开发站点上显示的示例,我欢迎您提出与此特定案例相关的建议。

您是否仍有此问题?如果您仍然需要一个解决方案(不太可能…),您可能可以执行类似以下操作:
XHR.addEventListener('loadstart',function(){XHR.upload.addEventListener('progress',function(event){…}})
。我认为loadstart可能会立即启动,从而延迟进度事件侦听器附件的执行。该片段应该具有相同的效果,但可以避免警报。简单的setTimeout()也可以工作。您没有尝试过吗?