2016-02-26 43 views
0

我使用setInterval来检测从PLC(可编程逻辑控制器)获得的值当它是1时,它执行一个PHP页面,该页面将数据插入到我的MYSQL数据库中。在数据库中只设置一次

因此,当我按住按钮超过1秒钟时间时,它会在其中设置多次DB值。

下面你可以找到我的代码:

var Axo800RstBtn; 

setInterval(function() 
{ 
    Axo800RstBtn = document.getElementById('Axo800BtnStatus').innerHTML; 
    var BatchUnits1 = document.getElementById('Axo800BatchProduction').innerHTML; 

    if(Axo800RstBtn == 1) 
    { 
     $.ajax({ 
     method: "POST", 
     url: "SetBatchProductionInDB.php", 
     data: { 
       machineNumber: 1, 
       actualProduction: BatchUnits1 
       }  
     }) 
     .done(function(msg) 
     { 
      console.log("Bericht: " + msg); 
     }) 
    } 
},1250); 

有没有办法告诉我的网页它只能每分钟执行一次?某种块。或者可能是执行查询块?

+0

这里所有的按钮点击事件在哪里? – Michael

+0

按钮值在'Axo800BtnStatus'' div'中设置。正如我所说这是来自我的PLC的价值。它有一个网络服务器,我使用一个函数来获取该'div'中的信息。 – Bart88

+0

每1.25秒检查一次按钮似乎是一个糟糕的解决方案。如果间隔刚刚发生,当用户点击时,您在做任何事情之前无缘无故空闲一秒钟以上。你为什么不能成立一个听众? – Michael

回答

1

这可能做的伎俩:

var Axo800RstBtn; 
var hasBeenSet = false; 

setInterval(function() 
{ 
    Axo800RstBtn = document.getElementById('Axo800BtnStatus').innerHTML; 
    var BatchUnits1 = document.getElementById('Axo800BatchProduction').innerHTML; 

    if(Axo800RstBtn == 1 && !hasBeenSet) 
    { 

     hasBeenSet = true; 

     $.ajax({ 
     method: "POST", 
     url: "SetBatchProductionInDB.php", 
     data: { 
       machineNumber: 1, 
       actualProduction: BatchUnits1 
       }  
     }) 
     .done(function(msg) 
     { 
      console.log("Bericht: " + msg); 
     }) 
    } 
},1250); 

虽然我会强烈建议你也这样做控制服务端。 I.E.您可以通过在PHP中设置会话变量来跟踪正在调用的脚本。

此代码将阻止一旦请求发送一次就发送请求。如果你想在60秒后启用它,你可以在hasBeenSet = true后添加;

hasBeenSet = true; 
setTimeout(function(){ hasBeenSet = false}, 60000); 
+0

编辑你的答案,并把它放进去。 – RiggsFolly

+0

@MonsieurPixel啊,这正是我想要的!非常感谢!这工作完美。我说'setTimeout',但我不知道它是如何工作的。再次感谢您的帮助! – Bart88

相关问题