仅在数据库中设置一次内容


Setting something in DB only once

我正在使用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);

有没有办法告诉我的页面它每 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);

尽管我强烈建议您也这样做 控制服务器端. 也就是说,您可以通过在 PHP 中设置会话变量来跟踪正在调用的脚本。

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

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