Witam.

Męczę się już bardzo długo z problemem skanowania karty czytnikiem RFID do inputa i przetwarzaniem tego numeru. O tyle jest mi ciężko, że skrypt wykonuje się poprawnie około 19/20 razy, czyli wczytuje 10 znaków DEC, kończy enterem, zamienia je na HEX, odpytuje czy użytkownik ma uprawnienia i wykonuje dalsze polecenia. Ten jeden raz, numer wczytuje się niepełny... 2 cyfry, 8 cyfr, różnie. W tym samym formie co 1 sekundę wywołuję 3 funkcje. Jeśli ich nie wywołuję, to skanowanie działa zawsze.

Jeśli w inpucie pojawił się enter to wykonuję to polecenie:
//jeśli 10 znaków to konwertuję dec to hex
// jeśli 8 znaków, to jest od razu hex i nie muszę robić konwersji

jQuery(function($) {
$('#scan_number_ustawianie').keydown(
    function (len){
        if(len.keyCode == 13){
            scan_number=document.getElementById("scan_number_ustawianie").value;
            hid_id=document.getElementById("hid_id").value;
            machines_info=document.getElementById("machines_info").value;
            ifhow=0;
            var n = scan_number.length;
                 
            if (n==10)
            {
                scan_number_hex=decimalToHex(scan_number,8);
                xmlhttp = new XMLHttpRequest();
                xmlhttp.open("POST","get_perm.php?code="+scan_number_hex+"&machines_info="+machines_info,false);
                xmlhttp.send();
                perm=xmlhttp.responseText;
                scan("scan_number_ustawianie");
                ifhow=1;
            }

            if (n==8 && ifhow==0)
            {
                xmlhttp = new XMLHttpRequest();
                xmlhttp.open("POST","get_perm.php?code="+scan_number+"&machines_info="+machines_info,false);
                xmlhttp.send();
                perm=xmlhttp.responseText;
                scan("scan_number_ustawianie");
            }
        }
    });
});

//funkcja uaktywniająca przyciski po jakimś czasie i wywołująca 3 funkcje ->
button_time(q);
show_leader_info();
show_shunter_info();
show_kj_info();

które wpływają na ten pojawiający się problem. Wszystkie działają na tej samej zasadzie, wkleję tylko jeden.

function button_time(q)
{
    operation_time = get_operation_time();
    temp_q = q;
    if (a<operation_time && q==0)
    {
        if (document.getElementById('minus') !==null) 
        {
            document.getElementById('minus').setAttribute("disabled","disabled");
            document.getElementById('minus_2').setAttribute("disabled","disabled");
            document.getElementById('minus').style.backgroundColor = "silver"; 
            document.getElementById('minus_2').style.backgroundColor = "silver"; 
            document.getElementById('minus').src = "images/accept_grey.png"; 
            document.getElementById('minus_2').src = "images/delete_grey.png";
            document.getElementById('repeat').setAttribute("disabled","disabled");
            document.getElementById('repeat').style.backgroundColor = "silver"; 
        }
    }
    else
    {
        if (document.getElementById('minus') !==null) 
        {
            document.getElementById('minus').removeAttribute("disabled");
            document.getElementById('minus_2').removeAttribute("disabled");
            document.getElementById('repeat').removeAttribute("disabled");
            document.getElementById('minus').src = "images/accept.png"; 
            document.getElementById('minus_2').src = "images/delete.png";
            document.getElementById('minus').style.backgroundColor = "green"; 
            document.getElementById('minus_2').style.backgroundColor = "red"; 
            document.getElementById('repeat').style.backgroundColor = "red"; 
        }
    }

    a=a+1; 

    setTimeout(
        function()
        {
            button_time(q);
            show_leader_info();
            show_shunter_info();
            show_kj_info();
        } , 1000
    ); 
}
function show_leader_info()
{
    xmlhttp2 = new XMLHttpRequest();
    xmlhttp2.open("POST","get_come_on_leader.php?type=2",false);
    xmlhttp2.send();
    if (xmlhttp2.readyState == 4 && xmlhttp2.status == 200) 
    {
        document.getElementById("inner").innerHTML = xmlhttp2.responseText;
    }

    machines_info=document.getElementById("machines_info").value;

    xmlhttp3 = new XMLHttpRequest();
    xmlhttp3.open("GET","get_come_on_leader.php?type=3&id="+machines_info,false);
    xmlhttp3.send();

    if (xmlhttp3.readyState == 4 && xmlhttp3.status == 200) 
    {
        rowcount = xmlhttp3.responseText;
    } 

    if (rowcount==1)
    {
        document.getElementById("leader_show").style = "display:none;";   
        document.getElementById("leader_hide").style = "display:block; background-color:red;"; 
    }

//////////////////////////////////////
}

I jeszcze fragment get_come_on_leader.php

if ($type==2)
{
    $query = "SELECT name from machines where come_on_leader = 1";
    $result = mysqli_query($con,$query); 
    $rowcount=mysqli_num_rows($result);

    if ($rowcount>0)
    {
        echo '<span style="font-size:24px; color:red; font-weight: bold;">PROWADZĄCY PROSZONY NA:</span>';  
        echo '<span style="font-size:24px; color:green; font-weight: bold;"> ';
    }

    while($row = mysqli_fetch_array($result)) 
    {
        echo $row['name'];
        echo ' | ';
    }

    echo '</span>';
}

if ($type==3)
{
    $id = $_GET['id'];

    $query2 = "SELECT id from machines WHERE id= '$id' and come_on_leader= '1' ";
    $result2= mysqli_query($con,$query2);
    $rowcount=mysqli_num_rows($result2);
    echo $rowcount;
}

Bardzo bym prosił o jakąś sugestię co powoduje przerwanie wczytywania tego numeru. Co najlepsze, czasem jest to tylko środkowy fragment...
Z JS zaczynam dopiero przygodę, pewnie kod bardzo mało optymalny. Dziękuję za wszelkie rady.