2016-02-26 45 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

相關問題