我的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;
}
LoadedObjects
和RequestedObjects
更新正确,在控制台中打印它们可以确认。 问题是,这在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();
}
问题是您已经使ajax请求同步:
req.open("GET", filename + "?antibuffer=" + Math.random(), false);
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^
从本质上说,这从来都不是正确的做法。 它锁定了大多数浏览器的UI,因为它阻塞了运行JavaScript代码和页面绘制的线程。
关闭该标志,这样它默认为true
(异步请求)。