Chrome ajax请求暂停

时间:2015-06-24 19:49:16

标签: javascript ajax google-chrome

如果我一个接一个地发出大约8个请求,那么它们会很好地加载,但是之后只是说#34;等待。"

这是我的基本html模板:

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8'>
    <title>Editing Quiz</title>
    <script src="../assets/js/lib.js"></script>
  </head>
  <body>
    <div>
      <a href="#/test">test</a>
      <a href="#/demos/QuizDemo">QuizDemo</a>
    </div>
    <div id="container">
    </div>
  </body>
</html>

以下是我的lib.js的相关部分:

function loadPage(e) {
    document.getElementById("container").innerHTML = "";
    var baseFilename = location.hash.substr(1);
    var url = "/LiquiZ2" + baseFilename + "_ajax.jsp"; // name of dynamic file to run

    var json = new XMLHttpRequest();
    json.onreadystatechange=function() {
      if (json.readyState!==4 || json.status!==200)
          return;
      processAJAX(json.responseText);
    }
    json.open("GET", url, true);
    json.send();
}

window.onload = loadPage;
window.onhashchange = loadPage;

如果我快速点击&#34;测试&#34;和#34; QuizDemo&#34;一个接一个(或在每次点击之间等待几秒钟),在8次请求后,他们停止加载并进入待处理状态。他们永远无法恢复,之后提出的任何请求也会停止。

这在Firefox中完美运行,所以我不知道出了什么问题。

1 个答案:

答案 0 :(得分:0)

问题是我在页面上有视频元素。 Chrome显然会自动开始加载视频,但会以块的形式加载它们,因此在您观看整个视频之前它们永远不会完成。因此,当我为页面加载新数据时,视频请求仍处于不稳定状态。

为了解决这个问题,我创建了一个全局列表media,每当我创建一个加载流(audiovideo)的元素时,我都会将它附加到列表中。然后每当我重新加载页面时,我只会遍历media并调用media[i].removeAttribute("src")然后media[i].load(),这将尝试重新加载流。重新加载流会自动中止以前的所有请求,如果src不存在,则加载会无声地失败。