Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在计时器内更改时保持变量的状态_Javascript_Variables_Timer - Fatal编程技术网

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

我正在使用JavaScript

我喜欢一种设置间隔计时器的方法

在该方法中,我正在更改模块变量的值

问题在于,对变量的更改没有“保存”。但在铬合金中,它们是

做我需要做的事情的公认做法是什么

这是我的代码:

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();
}
}
变量包括:

  • 电流TS1
  • 电流TS2
  • 当前TS3
  • 电流TS4
  • 帧计数器

  • 值不会被保留…

    尝试此操作,但请注意,当您尝试查看它们时,我将
    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中的情况。会给你打勾;因为它让我找到了解决方案,所以谢谢: