Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar

Člen
Avatar
:2.9.2015 7:01

Ahoj, mám napsanou takovou funkci:

function subQuery(url) {
       $.get(url, function( data ) {
           alert(data);
           return(data);
       });
   }

K tomu mě dohnalo to, že to řeším už od včerejšího odpoledne. Alert je tam proto, abych zjistil, co vůbec v proměnné data je - a ano, je tam to, co chci. Jenomže funkce mi vrací undefined. Nevíte čím to je?
PS: Původně jsem to takhle řešit nechtěl, ale po tom, co jsem nad tím strávil tak 10 hodin jsem to jednoduše vzdal a včera v posteli mě zčistajasna napadlo tohle řešení.

 
Odpovědět
2.9.2015 7:01
Avatar
Odpovídá na
Petr Štechmüller:2.9.2015 8:55

Ahoj, jaká funkce Ti vrací undefined? Jestli funkce subQuery, tak je to v pořádku, protože ta podle kódu nic nevrací.

Nahoru Odpovědět
2.9.2015 8:55
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar

Člen
Avatar
Odpovídá na Petr Štechmüller
:2.9.2015 9:07

Není to v pořádku. Má vracet proměnnou data, protože mi to vyhodí alert (a jakmile to vyhodí alert, znamená to, ze jsem stránku načetl a return se provede).

 
Nahoru Odpovědět
2.9.2015 9:07
Avatar
kxmx
Tvůrce
Avatar
kxmx:2.9.2015 9:10

ten return máš v callbacku

 
Nahoru Odpovědět
2.9.2015 9:10
Avatar
Odpovídá na
Petr Štechmüller:2.9.2015 9:20

Jenže return máš v anonymní funkci, kterou volá jQuery. Ty potřebuješ mít return na konci funkce subQuery.

Nahoru Odpovědět
2.9.2015 9:20
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar

Člen
Avatar
Odpovídá na Petr Štechmüller
:2.9.2015 9:24

A jak prenesu proměnnou data na konec funkce subQuery? Zkoušel jsem všechno možné a NEJDE MI TO.

 
Nahoru Odpovědět
2.9.2015 9:24
Avatar
Odpovídá na
Petr Štechmüller:2.9.2015 9:30

Takhle by to mělo fungovat:

function subQuery(url) {
       // vytvoříš pomocnou proměnnou
       var pom;
       $.get(url, function( data ) {
           alert(data);
           //return(data);
           // Do pomocné proměnné přiřadíš tvoje data
           pom = data;
       });
      // Nakonec tu pomocnou proměnnou vrátíš
      return pom;
   }
Nahoru Odpovědět
2.9.2015 9:30
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar

Člen
Avatar
Odpovídá na Petr Štechmüller
:2.9.2015 9:33

O přestávce vyzkousim a dam vědět, zatím díky. :)

 
Nahoru Odpovědět
2.9.2015 9:33
Avatar

Člen
Avatar
Odpovídá na Petr Štechmüller
:2.9.2015 14:07

Neustále undefined. :(

 
Nahoru Odpovědět
2.9.2015 14:07
Avatar
vosa53
Člen
Avatar
Odpovídá na
vosa53:2.9.2015 14:56

To co chceš ti fungovat nemůže, chvíli trvá než ty data příjdou. I kdyby jsi to dělal podle Petr Štechmüller tak to taky fungovat nebude, pač se proměnná vrátí dřív než se do ní něco uloží.

 
Nahoru Odpovědět
2.9.2015 14:56
Avatar
kxmx
Tvůrce
Avatar
kxmx:2.9.2015 15:15

Mrkni jak se ten get volá synchroně. Metoda ajax má parametr async: false

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
2.9.2015 15:15
Avatar

Člen
Avatar
Odpovídá na kxmx
:2.9.2015 15:32

Díky moc, it's working! ^^

 
Nahoru Odpovědět
2.9.2015 15:32
Avatar
vosa53
Člen
Avatar
vosa53:2.9.2015 15:39

Synchroní requesty v hlavním vlákně jsou prý deprecated. Ve chromu je to napsáno jako varování:

Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/

a na té stránce na kterou se odkazuje je tohle:

Synchronous XMLHttpRequest outside of workers is in the process of being removed from the web platform as it has detrimental effects to the end user's experience. (This is a long process that takes many years.) Developers must not pass false for the async argument when the JavaScript global environment is a document environment. User agents are strongly encouraged to warn about such usage in developer tools and may experiment with throwing an InvalidAccessError exception when it occurs.

http://stackoverflow.com/…ted-what-now

 
Nahoru Odpovědět
2.9.2015 15:39
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.