我有几个大型表格导致会话超时前填写问题。我需要一个小小的JavaScript来包含在页面末尾,每隔几分钟就能ping一个文件,以便在页面打开时刷新会话超时。所以我有一个函数,最后一条语句是在差距之后再次调用函数。此外,由于一系列原因,jQuery和其他框架不适用于此。所以,我从https://stackoverflow.com/a/35970894/385011我的心跳不会暂停超时值
var getJSON = function(url, callback) {
var xhr = new XMLHttpRequest();
xhr.open("get", url, true);
xhr.responseType = "json";
xhr.onload = function() {
var status = xhr.status;
if (status == 200) {
callback(null, xhr.response);
} else {
callback(status);
}
};
xhr.send();
};
//hearbeat
function heartbeat(heartbeaturl){
getJSON(heartbeaturl,function(err, data) {
console.log(Date.now());
console.log(data.time);
setTimeout(heartbeat(heartbeaturl), data.time);
});
}
console.log("run heartbeat");
heartbeat("heartbeat.json")
data.time将返回60000,所以应该运行的心跳每分钟把这个在一起,但它运行犯罪每隔1〜4毫秒。我错过了什么?
Akternative创造一个新的匿名函数传递参数,如以'setTimeout'如此 - '的setTimeout(心跳,data.time,heartbeaturl)'。延迟后的任何内容在执行时都会传递到延迟函数上。 – vlaz