Ajax - čekání na výsledek

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Zbynas 23. 3. 2018 14:19

Dejme tomu, že mám button (třeba s názvem PLUS), na který když kliknu, pomocí ajaxu na jiné stránce provedu mysql příkaz (přičtu něco do databáze). Do doby, než se mysql příkaz provede potřebuji, aby by se button zneaktivnil - nešlo na něj kliknout. Jak toho dosáhnout? Jak zjistím, že mysql příkaz už provedl? Jasně že si můžu něchat něco vracet z té oné stránky. Ale jak to kontrolovat za běhu tak, abych ve chvíli, kdy se tak stane, to zjistil?

Snad mě chápete :)
NVidia GTX 1060 6GB, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 23. 3. 2018 14:27

Budeš se pravidelně dotazovat serveru, jestli už je to hotovo.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod JirkaVejrazka 23. 3. 2018 14:37

Neda mi to - to ta operace pricitani trva tak dlouho, ze stoji za to "zamykat" nejaky button?
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod Zbynas 23. 3. 2018 14:43

Ano, někdy bohužel dojde na serveru k dost velké, někdy i 10s prodlevě. Je to málokdy, nebudu kvůli tomu měnit hosting, Ale prostě potřebuju to vyřešit, protože neumětelové klikaj na to jak blázni a netuší, že se to načítá :D Ve výsledku se to pak provede třeba 5x ..

Jak se mám dotazovat? Z té externí stránky? Nebo? Prostě ta externí stránka mi vrátí mysql výsledek, že je hotovo, ale co a jak mám poslat na hlavní stránku a jak to na ní zpracovat?
NVidia GTX 1060 6GB, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod JirkaVejrazka 23. 3. 2018 14:49

Ty chces "zneaktivnit" primo ten button, kterym se startuje tak akce pridavani do databaze? No tak to jednoduse - jeho kliknutim spustis JavaScript, ktery nastavi tomu buttonu priznak "disabled" a provede Ajax call. No a az ten Ajax skonci, tak ten priznak "disabled" zase zrusis. Nebo jsem te pochopil spatne?

-- 23. 3. 2018 14:50 --

Mimochodem, nazvat nekoho kdo se chova normalne "neumetelem" je docela odvaha. Oni nemohou vedet, ze mas tak pomaly system. Vazne neni rozumny duvod, proc by mela aplikace neco zpracovavat 10 sekund.
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod Zbynas 23. 3. 2018 15:51

A jak zjistím, že již ten Ajax proběhl?

Mám hosting u wedos. Občas se prostě stane, několikrát denně, že čekám na request z jejich mysql serveru i těch 10 sec. Možná bude chyba i u mě, počtem mysql dotazů, které na server odesílám. Proto dělám celý systém odznovu a zrovna teď jsem u tohohle problému :D

Tohle jsem někde zkopíroval a používám doteď. Bohužel nejsem schopnej tomu jaksi rozumět. Rozumím jen tomu, že do toho mrsknu url a post data a ono se to pošle.

Kód: Vybrat vše
function ajax(url,stringos) { 
   
       

var http_request = false;
       
var string = document.getElementById(stringos).value;
       
var request = "string="+string;

       



if (window.XMLHttpRequest) {
           
   http_request = new XMLHttpRequest();
        }
  else
   if (window.ActiveXObject)
   {
           
     try
     {
             
      http_request = new ActiveXObject('Msxml2.XMLHTTP');
           
     }
     catch (eror)
     {
             
      http_request = new ActiveXObject('Microsoft.XMLHTTP');
           
     }
 
       }

   

http_request.onreadystatechange = function() { zpracuj(http_request); };
 
http_request.open('POST',url, true);
       
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
       
http_request.send(request);
   }

   


function zpracuj(http_request) {
       
   if (http_request.readyState == 4) {
           
      if (http_request.status == 200) {
               
      document.getElementById('vysledek').innerHTML = http_request.responseText;           
           
       } else
      { alert('Chyba');
}
       
       }
   
}

NVidia GTX 1060 6GB, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod JirkaVejrazka 23. 3. 2018 16:01

To vypada jako Ajax z roku 2006 :) Nepouzivas nahodou neco jako treba jQuery?

Ale i kdyby ne, cele to mas jako na dlani. Pred radek "http_request.send(request)" das neco, cim zakazes ten button (staci mu v DOM dat priznak "disabled").

No a funkce zpracuj se zavola, az kdyz ten Ajax dobehne, takze nekam tam das zase povoleni toho buttonu.
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod Zbynas 23. 3. 2018 16:07

jo tak :) Díky moc, pecka :)
NVidia GTX 1060 6GB, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků