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 :)
hlavní auto: Škoda Octavia II rv 2013 kombi 1.6 TDI 4x4 full palba
druhé auto: Subaru Legacy III rv 2001 kombi 2,5 benzin awd tramvaj
NVidia GTX 580, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 200 Mbps, Upload 20 Mbps, ping 8
VINOTÉKA U FREJKA
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?
hlavní auto: Škoda Octavia II rv 2013 kombi 1.6 TDI 4x4 full palba
druhé auto: Subaru Legacy III rv 2001 kombi 2,5 benzin awd tramvaj
NVidia GTX 580, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 200 Mbps, Upload 20 Mbps, ping 8
VINOTÉKA U FREJKA
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');
}
       
       }
   
}

hlavní auto: Škoda Octavia II rv 2013 kombi 1.6 TDI 4x4 full palba
druhé auto: Subaru Legacy III rv 2001 kombi 2,5 benzin awd tramvaj
NVidia GTX 580, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 200 Mbps, Upload 20 Mbps, ping 8
VINOTÉKA U FREJKA
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 :)
hlavní auto: Škoda Octavia II rv 2013 kombi 1.6 TDI 4x4 full palba
druhé auto: Subaru Legacy III rv 2001 kombi 2,5 benzin awd tramvaj
NVidia GTX 580, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 200 Mbps, Upload 20 Mbps, ping 8
VINOTÉKA U FREJKA
Zbynas
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník