提问者:小点点

在Chrome和Safari中更新HTML不会立即更新网站


我的HTML代码中有两个输出,如下所示:

Loaded: <output id="loaded"> 0 </output>
Requested: <output id="requested"> 0 </output>

它们向用户显示加载了多少文件,请求了多少文件,因此用户可以估计加载完成的时间。 在Javascript内部,我使用这个函数更新数字:

function updateLoadNumbers() {
    document.getElementById("loaded").value = loadedObjects;
    document.getElementById("requested").value = requestedObjects;
} 

LoadedObjectsRequestedObjects更新正确,在控制台中打印它们可以确认。 问题是,这在Firefox中运行良好,但Chrome和Safari不会立即显示更新的数字,它们只有在所有文件加载完毕后才会显示。

每个文件都加载以下代码:

function loadFileAsText(filename, callback) {
  var req = new XMLHttpRequest();
    req.open("GET", filename + "?antibuffer=" + Math.random(), false);
    req.onload = function() {
    if(req.status >= 200 && req.status < 300 || req.status == 0)
      callback(req.responseText);
    else
      console.error(req.statusText, req.responseText);
    };
    req.send();
}

共1个答案

匿名用户

问题是您已经使ajax请求同步:

req.open("GET", filename + "?antibuffer=" + Math.random(), false);
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^

从本质上说,这从来都不是正确的做法。 它锁定了大多数浏览器的UI,因为它阻塞了运行JavaScript代码和页面绘制的线程。

关闭该标志,这样它默认为true(异步请求)。