Тема: checkbox на ajax
Показать сообщение отдельно
  #1 (permalink)  
Старый 25.03.2019, 10:04
Новичок на форуме
Отправить личное сообщение для djsidmsps Посмотреть профиль Найти все сообщения от djsidmsps
 
Регистрация: 25.03.2019
Сообщений: 8

checkbox на ajax
Всем доброго времени суток! Прошу сильно не пинать начинающего.. Бьюсь несколько дней над следующей задачей: Есть чекбокс на странице, который по клику отправляет свое состояние серверу, в виде 1= галка установлена, 0 = галка снята - function Ligntonoff() этим занимается. На сервере состояние чекбокса загоняется в переменную, далее переменная фигурирует в xml который скрипт читает каждую секунду( function handleServerResponse() ).Далее скрипт в зависимости от состояния фигурируемой переменной в xml устанавливает/снимает галку чекбокса. Все как бы работает,но,проблема в том что передача данных не мгновенная,и пока до xml дойдет текущее состояние чека,он меняет свое состояние на противоположное (так как в xml еще старые данные),после чего принимает правильное состояние. Пожалуйста,подскажите как можно обойти данную неприятность?

<html><head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  <title>Lignt_Control</title>
 
<SCRIPT>

var xmlHttp=createXmlHttpObject();

function createXmlHttpObject(){
 if(window.XMLHttpRequest){
    xmlHttp=new XMLHttpRequest();
 }else{
    xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');
 }
 return xmlHttp;
}

function process(){    // Функция обращается к xml каждую секунду
 if(xmlHttp.readyState==0 || xmlHttp.readyState==4){
   xmlHttp.open('PUT','xml',true);
   xmlHttp.onreadystatechange=handleServerResponse;
   xmlHttp.send(null);
 }
 setTimeout('process()',1000);
}

var isResizeble = false;

function handleServerResponse(){ // Функция разбирает xml по тегам
 if(xmlHttp.readyState==4 && xmlHttp.status==200){
   xmlResponse=xmlHttp.responseXML;

   xmldoc = xmlResponse.getElementsByTagName('timedatestring');
   message = xmldoc[0].firstChild.nodeValue;
   document.getElementById("NTP_TimeDate").innerHTML = message;
   
   xmldoc = xmlResponse.getElementsByTagName('uptimestring');
   message = xmldoc[0].firstChild.nodeValue;
   document.getElementById("UptimeString").innerHTML = message;

   xmldoc = xmlResponse.getElementsByTagName('set_sec'); // Имя тега set_sec
   message = xmldoc[0].firstChild.nodeValue;
   document.getElementById('Set_Sec').value=message;   // Данные из тега передаются элементу Set_Sec по ID

   xmldoc = xmlResponse.getElementsByTagName('set_zummer'); 
   message = xmldoc[0].firstChild.nodeValue;
   document.getElementById('Set_Zummer').value=message;  

   xmldoc = xmlResponse.getElementsByTagName('lignt_on_off');
   message = xmldoc[0].firstChild.nodeValue;
   if(message==true){                                      // Устанавливаем / снимаем галочку чекбокса в зависимости от принятых данных с сервера
   document.getElementById('checkbox').checked = true;
   }
   if(message==false){
    document.getElementById('checkbox').checked = false;
   }
   
  }
 }
 
function Setsec(){
znachenie=prompt('Введите число от 1 до 600');
if(znachenie<=0 || znachenie>=600){
alert('Введите число от 1 до 600 !!!');  
}else{
server = "/Setsec?state=" + znachenie;
request = new XMLHttpRequest();
request.open("GET", server, true);
request.send();  
}
}

function Setzummer(){
znachenie=prompt('Введите число от 0 до 100');
if(znachenie >= 100){
alert('Введите число от 0 до 100 !!!'); 
}else{
server = "/Setzummer?state=" + znachenie;
request = new XMLHttpRequest();
request.open("GET", server, true);
request.send(); 
}
}

function Ligntonoff() {  // Отправка состояния чекбокса на сервер
    var ch1;
    if(document.getElementById('checkbox').checked ==true) {
    ch1=1;
    }else{
    ch1=0;
    }
    server = "/Ligntonoff?state=" + ch1;
    request = new XMLHttpRequest();
    request.open("GET", server, true);
    request.send();   
}

</SCRIPT>
  
  
</head>

<BODY onload="process();">   

    
    <br>
    Дата/Время с NTP: &nbsp; <label id="NTP_TimeDate"></label> 
    <br>
    <br>
    Время работы: &nbsp; <label id="UptimeString"></label> 
    <br>
    <br>
    
    Задержка освещения в сек: &nbsp;<input type="text" name="h" onclick="Setsec()" id="Set_Sec" value="00" size="1" readonly>
    <br>
    <br>
    Интенсивность зуммера: &nbsp;<input type="text" name="h" onclick="Setzummer()" id="Set_Zummer" value="00" size="1" readonly>
    <br>
    <br>
    Принудительное освешение: &nbsp; <input id="checkbox" type="checkbox" onclick="Ligntonoff()"/>
              
   
   </body></html>
Ответить с цитированием