0

可能重复:
如何从 XMLHttpRequest 获取进度

我正在尝试使用 xmlhttprequest 下载一个 1 mb 的文件,并检查下载时间以进行带宽测量。但是,以下代码只给了我来自服务器的响应时间。它不会等到所有文件加载完毕。

var start = new Date().getTime();
(function rec() {
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', "https://www.example.com/test/dummyFile1024kb", true);   
xmlHttp.setRequestHeader("Cache-Control", "no-cache");
xmlHttp.onreadystatechange = function () {
     if (xmlHttp.readyState == 4) {
         var total=(new Date() - start)            
         alert(total)    
        };
       xmlHttp.send(null);
    })();

我应该怎么做才能下载所有文件?欢迎任何其他建议。

4

1 回答 1

1

xmlHttp.send(null);不应该在你的onreadystatechange函数内部,而应该在它之后。在进行中的 XHR 请求上调用 send() 将导致未指定的行为,如果不是完全错误的话。它在您的 readystatechange 处理程序中的事实意味着您还有一些其他未显示的正在调用的代码xmlHttp.send(),否则该处理程序将永远不会被调用(并且您的警报将永远不会触发)。

即我认为你想要的是:

(function rec() {
  var start = new Date().getTime();
  var xmlHttp = new XMLHttpRequest();
  xmlHttp.open('GET', "https://www.example.com/test/dummyFile1024kb", true);   
  xmlHttp.setRequestHeader("Cache-Control", "no-cache");
  xmlHttp.onreadystatechange = function () {
   if (xmlHttp.readyState == 4) {
      var total=(new Date() - start)            
      alert(total)    
    };
  };
  xmlHttp.send(null);
})();
于 2013-01-12T01:57:36.230 回答