我具有检查结果是否在服务器上的功能。
var d = document;
var dl = d.location;
var w = window;
var wt = w.setTimeout;
var X = XMLHttpRequest;
function _checkreload() {
var x = new X();
x.open('GET', '?test=results');
x.onreadystatechange = function (c) {
if (x.readyState === 4) {
if (x.status == 205) {
dl.reload(true);
} else {
wt(_checkreload, 200);
}
}
};
x.send();
};
_checkreload();
有时由于未知原因取消了重新加载:
如何找出重新加载被取消的原因?
因为请求被取消,所以详细信息窗格中没有信息。即使某些字节已发送到服务器(甚至从服务器返回到浏览器响应),chrome也不会显示它们。
答案 0 :(得分:0)
尝试在try {} catch
函数内添加_checkReload
。如果是在JS方面,这将帮助您了解错误所在。
var d = document;
var dl = d.location;
var w = window;
var wt = w.setTimeout;
var X = XMLHttpRequest;
function _checkreload() {
try { // Add a try here...
var x = new X();
x.open('GET', '?test=results');
x.onreadystatechange = function (c) {
if (x.readyState === 4) {
if (x.status == 205) {
dl.reload(true);
} else {
wt(_checkreload, 200);
}
}
};
x.send();
} catch (err) { console.log(err); } // ... and a catch there.
};
_checkreload();
当您的函数重新加载HTML页面时,我建议您使用chrome开发人员工具上的enable the Preserve log feature。这对调试很有帮助。
最后但并非最不重要的一点,请注意,如果您从本地主机运行此代码,则可能会遇到CORS错误。
答案 1 :(得分:0)
就像其他评论中提到的那样,看来您的代码正在与加载所有页面资产竞争。
要保护它,您可能需要将函数包装在窗口的load
事件的事件侦听器中。
window.addEventListener('load', function(event){
var d = document;
var dl = d.location;
var w = window;
var wt = w.setTimeout;
var X = XMLHttpRequest;
function _checkreload() {
var x = new X();
x.open('GET', '?test=results');
x.onreadystatechange = function (c) {
if (x.readyState === 4) {
if (x.status == 205) {
dl.reload(true);
} else {
wt(_checkreload, 200);
}
}
};
x.send();
};
_checkreload();
});
如果每200毫秒的计时对此很关键,则可以为窗口的loadstart
和loadend
设置事件监听器,并为每个监听器设置时间戳。事件之间的差异是您初始的setTimeout
的偏移量。