Javascript 在计时器内更改时保持变量的状态
我正在使用JavaScript 我喜欢一种设置间隔计时器的方法 在该方法中,我正在更改模块变量的值 问题在于,对变量的更改没有“保存”。但在铬合金中,它们是 做我需要做的事情的公认做法是什么 这是我的代码:Javascript 在计时器内更改时保持变量的状态,javascript,variables,timer,Javascript,Variables,Timer,我正在使用JavaScript 我喜欢一种设置间隔计时器的方法 在该方法中,我正在更改模块变量的值 问题在于,对变量的更改没有“保存”。但在铬合金中,它们是 做我需要做的事情的公认做法是什么 这是我的代码: function start() { var myVar = setInterval(function () { GetTimings() }, 100); } var currentts1; var currentts2; var currentts3; var currentt
function start()
{
var myVar = setInterval(function () { GetTimings() }, 100);
}
var currentts1;
var currentts2;
var currentts3;
var currentts4;
var frameCounter;
function GetTimings() {
if (frameCounter < 1) {
frameCounter++;
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", urlTS, false);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
var nextts = xmlhttp.responseText;
var bits = nextts.split('|');
if (currentts1 != bits[0]) {
currentts1 = bits[0];
postMessage("0|" + bits[0]);
}
if (currentts2 != bits[1]) {
currentts2 = bits[1];
postMessage("1|" + bits[1]);
}
if (currentts3 != bits[2]) {
currentts3 = bits[2];
postMessage("2|" + bits[2]);
}
if (currentts4 != bits[3]) {
currentts4 = bits[3];
postMessage("3|" + bits[3]);
}
frameCounter--;
}
}
xmlhttp.send();
}
}
函数开始()
{
var myVar=setInterval(函数(){GetTimings()},100);
}
无功电流TS1;
无功电流TS2;
无功电流TS3;
无功电流TS4;
var帧计数器;
函数GetTimings(){
if(帧计数器<1){
帧计数器++;
var xmlhttp=new XMLHttpRequest();
open(“GET”,urlTS,false);
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4){
var nextts=xmlhttp.responseText;
变量位=nextts.split(“|”);
if(currentts1!=位[0]){
currentts1=位[0];
postMessage(“0 |”+位[0]);
}
if(currentts2!=位[1]){
currentts2=位[1];
postMessage(“1 |”+位[1]);
}
如果(currentts3!=位[2]){
currentts3=位[2];
postMessage(“2 |”+位[2]);
}
如果(currentts4!=位[3]){
currentts4=位[3];
postMessage(“3 |”+位[3]);
}
帧计数器--;
}
}
xmlhttp.send();
}
}
变量包括:
值不会被保留…尝试此操作,但请注意,当您尝试查看它们时,我将
currentts*
更改为数组
function start() {
var myVar = setInterval(GetTimings, 100);
}
var currentts = [null, null, null, null];
var in_progress = 0; // clear name
function GetTimings() {
var xhr;
if (in_progress > 0) return; // die
++in_progress;
xhr = new XMLHttpRequest();
xhr.open('GET', urlTS);
function ready() {
var nextts = this.responseText,
bits = nextts.split('|'),
i;
for (i = 0; i < currentts.length; ++i)
if (currentts[i] !== bits[i])
currentts[i] = bits[i], postMessage(i + '|' + bits[i]);
--in_progress;
}
if ('onload' in xhr) // modern browser
xhr.addEventListener('load', ready);
else // ancient browser
xhr.onreadystatechange = function () {
if (this.readyState === 4 && xhr.status === 200)
ready.call(this);
};
// listen for error, too?
// begin request
xhr.send();
}
函数开始(){
var myVar=setInterval(GetTimings,100);
}
var currentts=[null,null,null,null];
var in_progress=0;//明确的名称
函数GetTimings(){
var-xhr;
如果(进行中>0)返回;//死亡
++正在进行中;
xhr=newXMLHttpRequest();
xhr.open('GET',urlTS);
函数就绪(){
var nextts=this.responseText,
bits=nextts.split(“|”),
我
对于(i=0;i
因此,从这里可以看出,当请求时间超过100ms时,您想对服务器进行DoS攻击吗?目的是确定服务器是否有针对我的客户端的更新。如果是这样的话,那么就下载图像代码>不设置它,帧计数器<1;//false
和帧计数器++;//NaN
使用“帧计数器”一次只允许一个请求。我只是在摆弄间隔值。如果需要的话,它可以是1000毫秒或更多。嗨,好的。在我的副本中错过了它+pasteHi,这对我不起作用。我还是有问题。我拥有的唯一额外信息是,我正在web worker中使用此代码。但是,我在web worker之外尝试了我的代码(我正在使用IE9),但它也不起作用。现在,我将在web worker之外尝试此代码并返回。但是你的代码比我的代码有了很大的改进,所以很多人都不知道到底出了什么问题。你的控制台里有消息吗?早上好,我又看了一遍。它失败有两个原因。首先,我在一个计时器上调用它,计时器的间隔设置为“10”。我把它改成了“100”。我还将“GET”改为“POST”。然后一切都成功了。奇怪的是,我发现这只适用于IE中的情况。会给你打勾;因为它让我找到了解决方案,所以谢谢: