setInterval每隔n秒调用一次函数

时间:2014-04-07 19:50:25

标签: javascript jquery

我有一个路障,每隔1秒调用一次功能。加载页面时代码运行一次,如果我手动刷新页面,它会再次运行。提前谢谢!

以下是代码:

//query the function S1M1StatusInt every second

setInterval(function () {S1M1StatusInt()}, 1000);

下面的Test_tag是0-4范围内的int:=“Skid 1”.Test_tag:是解决PLC标签的语法。

// Change the Skid 1 Meter 1 block from grey to red or green based on "Skid 1".Test_tag

function S1M1StatusInt() {
    var dim1= :="Skid 1".Test_tag:;

    switch (dim1)
    {
    case 1:
        document.getElementById("S1M1Status").className ="";
        document.getElementById("S1M1Status").className = "RedBlock";
        break;
    case 2:
        document.getElementById("S1M1Status").className ="";
        document.getElementById("S1M1Status").className = "RedBlock";
        break;
    case 3: 
        document.getElementById("S1M1Status").className ="";
        document.getElementById("S1M1Status").className = "GreenBlock";
        break;
    }}

-----编辑epascarello -----

function CheckS1M1StatusInt(){
    $.ajax({
        Type: "Get",
        url: "Meter_Status/S1M1_Status.htm",
        data: {*** what goes in here if I am retreving data***},
        success: successCheck,
        error: errorcheck
    });
}

function successCheck(data){
    switch (data)
                {
                case 1:
                    document.getElementById("S1M1Status").className ="";
                    document.getElementById("S1M1Status").className = "RedBlock";
                    break;
                case 2:
                    document.getElementById("S1M1Status").className ="";
                    document.getElementById("S1M1Status").className = "RedBlock";
                    break;
                case 3: 
                    document.getElementById("S1M1Status").className ="";
                    document.getElementById("S1M1Status").className = "GreenBlock";
                    break;
                };
    Console.log(data);
    window.setTimeout(checkServer,1000);
}

function errorCheck(){
    console.log(arguments);
}

3 个答案:

答案 0 :(得分:2)

var dim1= :="Skid 1".Test_tag:;

这完全是胡说八道。解析失败导致你的函数执行失败的方式如此壮观,以至于整个计时器都被杀死了。

答案 1 :(得分:2)

问题是浏览器不会继续更新服务器端代码。 PLC标签[无论是什么]被渲染一次,它不会继续从服务器获取新值。这就是为什么它永远不会改变。

您需要做的是对服务器进行Ajax调用并检查状态。

function checkServer() {
  $.ajax({
    type: "POST",
    url: "URLToPageToCheck/foo.php",
    data: { "itemX" : "whatYouWantToSendUp"},
    success: successCheck,
    error: errorCheck
  });
}

function successCheck(data){
   //Logic Check Here
   console.log(data);
   //Call checkServer again with a delay
   window.setTimeout(checkServer,1000);   
}
function errorCheck(){
    console.log(arguments);
}

答案 2 :(得分:-2)

从这个开始

setInterval(function () {S1M1StatusInt()}, 1000);

应该只是

setInterval(S1M1StatusInt, 1000);

在这里,您的语句格式错误,导致错误。 PLC是一种与JavaScript,HTML和其他形式的Web标记不同的语言,不起作用。

 var dim1= :="Skid 1".Test_tag:;

此外,您可以设置类名而不使用jQuery清除它

 Object.attr('class', 'className');

或者使用toggleClass或addClass / removeClass函数。阅读更多here