2016-02-26 5 views
0

Я использую setInterval для определения значения, которое я получаю от своего ПЛК (программируемый логический контроллер). Когда он равен 1, он выполняет страницу PHP, которая вставляет данные в мою базу данных MYSQL.Настройка только в DB только

Поэтому, когда я держу свою кнопку нажатой более 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 минуту? какой-то блок. Или, может быть, блок запроса выполнения?

+0

Где находится событие нажатия кнопки во всем этом? – Michael

+0

Значение кнопки устанавливается в 'Axo800BtnStatus'' div'. Как я уже сказал, это значение от моего ПЛК. У него есть веб-сервер, и я использую функцию для получения информации в этом '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); 

Хотя я бы настоятельно рекомендуем вам также сделать этот контроль на стороне сервера. И.Е. вы можете отслеживать сценарий, вызываемый настройкой сеанса var в PHP.

Этот код предотвратит отправку запроса сразу после отправки запроса. Если вы хотите включить его через 60 секунд, вы можете добавить после hasBeenSet = true;

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

Хорошо отредактируйте свой ответ и поместите в него эту информацию. – RiggsFolly

+0

@MonsieurPixel А это именно то, что я хочу! Большое спасибо! это работает отлично. Я что-то говорю о 'setTimeout', но я не знал, как это работает. Спасибо еще раз за помощь! – Bart88

Смежные вопросы