XMLHttpRequest文件下载

时间:2013-01-11 08:24:00

标签: javascript jquery html ajax xmlhttprequest

  

可能重复:
  How to get progress from XMLHttpRequest

total我正在尝试使用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);
    })();

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

1 个答案:

答案 0 :(得分: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);
})();