Autor | Zpráva | ||
---|---|---|---|
Shoty Profil * |
Promměné vůbec nechápu. Oproti PHP je JS uplně nelogické, viz tento příklad:
function(returned_email_exist){ var returned_email_value = "ahoj"; } alert(returned_email_value); A následujte "returned_email_value is not defined" Může mě někdo poradit (vysvětlit) proč to takhle nemůže v JS fungovat ? |
||
Joker Profil |
#2 · Zasláno: 3. 3. 2010, 14:13:16 · Upravil/a: Joker
Shoty:
„Oproti PHP je JS uplně nelogické“ Vždyť PHP se v tomhle případě chová úplně stejně. <?php function foo() { $bar = "ahoj"; } echo($bar); ?> -> "Notice: Undefined variable: bar in (...)" Problém je rozsah platnosti proměnných, nastudujte si globální a lokální proměnné (například), to je docela základní věc. edit: zvýrazňovač syntaxe nějak stávkuje... Jo a poznámka, v PHP se ta poznámka samozřejmě vypíše jen když je zapnuté zobrazování poznámek. |
||
Chamurappi Profil |
#3 · Zasláno: 3. 3. 2010, 14:14:30 · Upravil/a: Chamurappi
Reaguji na Shotyho:
„Oproti PHP je JS uplně nelogické“ Spíš naopak. „Může mě někdo poradit (vysvětlit) proč to takhle nemůže v JS fungovat?“ Protože proměnná vytvořená ve funkci existuje jen ve funkci. Tak to funguje prakticky ve všech normálních programovacích jazycích (Edit: a zřejmě i v PHP). Jestli chceš s proměnnou pracovat mimo funkci, musíš ji vytvořit mimo funkci. |
||
Shoty Profil * |
#4 · Zasláno: 3. 3. 2010, 14:19:59
a existuje nějaké řešení ? Jediný co jsem zatím praktikoval je to že se proměná napíše do DIVU přez InnerHTML a pak se zase nekde načte ale tohle je velmi nepraktické :(
|
||
_es Profil |
#5 · Zasláno: 3. 3. 2010, 14:21:54
Shoty:
„a existuje nějaké řešení ?“ Riešenie čoho? Čo vlastne chceš? |
||
Shoty Profil * |
#6 · Zasláno: 3. 3. 2010, 14:24:16
No že někdě něco definuji ve funkci apak to volně používat i mimo funkci
|
||
Shoty Profil * |
#7 · Zasláno: 3. 3. 2010, 14:25:42
Prostě to co mám v příkladě.
|
||
Chamurappi Profil |
#8 · Zasláno: 3. 3. 2010, 14:28:03
Reaguji na Shotyho:
Jestli chceš s proměnnou pracovat mimo funkci, musíš ji vytvořit mimo funkci. Čemu na tom nerozumíš? |
||
Shoty Profil * |
#9 · Zasláno: 3. 3. 2010, 14:30:29
ale rozumím jen bych potřeboval prakticky poradit, mrkni prosím na tento kód:
$.get("checks/email_exist.php", { email: inputvalue }, function(returned_email_value){ return returned_email_value; }); Lze nějak aktivovat tuto funkci? Abych třeba napsal: alert(nejakafunkce()); díky za radu |
||
_es Profil |
#10 · Zasláno: 3. 3. 2010, 14:31:09
Shoty:
„No že někdě něco definuji ve funkci apak to volně používat i mimo funkci“ Najlepšie je definovať globálnu premennú: var x; function f(){x = 8;} f(); alert(x); |
||
Shoty Profil * |
#11 · Zasláno: 3. 3. 2010, 14:34:25
Reaguji na _es:
Konečně něco užítečného :) a můžu používat funkci ve funkci jak jsem uvedl minulý příklad ? takže by to bylo takhle: $.get("checks/email_exist.php", { email: inputvalue }, function(returned_email_value){ var x; function f(){x = return returned_email_value;} }); |
||
Shoty Profil * |
#12 · Zasláno: 3. 3. 2010, 14:35:01
oprava:
$.get("checks/email_exist.php", { email: inputvalue }, function(returned_email_value){ var x; function f(){x = returned_email_value;} }); |
||
Shoty Profil * |
#13 · Zasláno: 3. 3. 2010, 14:38:41
Stejně je to co píši absolutní nesmysl... Můžete mi někdo poradit to co jsem psal v příspěvku #9 ? Děkuji.
|
||
_es Profil |
#14 · Zasláno: 3. 3. 2010, 14:42:22
Shoty:
„Konečně něco užítečného :)“ To ti radil už Joker (nastuduj si...). Tá definícia musí byť v globálnom kóde, nie v definícii tej nepomenovanej funkcie. Teda asi nejako takto, ak som správne odhadol tú funkčnosť nejakého frameworku: var x; $.get("checks/email_exist.php", { email: inputvalue }, function(returned_email_value){x = returned_email_value;}); |
||
Shoty Profil * |
#15 · Zasláno: 3. 3. 2010, 14:47:02
Ano, jedná se o jQuery (AJAX funkce)
Jede to. Děkuji. |
||
Shoty Profil * |
#16 · Zasláno: 3. 3. 2010, 15:07:16
Hmm tak to bohužel taky nejede :( protože x vrátí UNDEFINED
|
||
Chamurappi Profil |
#17 · Zasláno: 3. 3. 2010, 15:10:14
Reaguji na Shotyho:
AJAX funguje asynchronně, nečeká se na zpracování požadavku, nemůžeš pracovat s navrácenými daty ze serveru okamžitě. |
||
_es Profil |
#18 · Zasláno: 3. 3. 2010, 15:11:20
Shoty:
„protože x vrátí UNDEFINED“ A čo nastane pri takomto kóde: var x; $.get("checks/email_exist.php", { email: inputvalue }, function(returned_email_value){x = returned_email_value; alert(x);}); |
||
Shoty Profil * |
#19 · Zasláno: 3. 3. 2010, 15:14:20
Takhle to udělá alert s: hodnotou - tak to funguje
|
||
Shoty Profil * |
#20 · Zasláno: 3. 3. 2010, 15:17:18
Reaguji na [#17] Chamurappi
Stím nemůžu souhlasit. Tento kód co vidíš dá GET na checks/email_exist.php a ten soubor hned vrátí hodnotu v mém případě zatím checks/email_exist.php vypadá takto: <?php if ($_GET["email"]){ echo $_GET["email"]; } ?> // Pokud neumis PHP tak to udela to ze to co dostane to vypíše. |
||
Shoty Profil * |
#21 · Zasláno: 3. 3. 2010, 15:18:48
_es máš prosím nějaké nápady ?
|
||
_es Profil |
#22 · Zasláno: 3. 3. 2010, 15:21:25
Shoty:
Chamurappi ti to vysvetlil správne, tá globálna premenná x sa zmení až keď ten PHP skript vráti dáta, až potom bude spustená tá funkcia, čo zmení hodnotu premennej x. |
||
Chamurappi Profil |
#23 · Zasláno: 3. 3. 2010, 16:03:00 · Upravil/a: Chamurappi
Reaguji na Shotyho:
„Stím nemůžu souhlasit.“ Můžeš s tím nesouhlasit, ale to je asi tak všechno, co s tím můžeš dělat. „ten soubor hned vrátí hodnotu“ Ale než ji vrátí, tak už prohlížeč dávno zpracovává další příkazy JavaScriptu. Proto tam máš tu callback funkci — v ní máš provádět to, co potřebuješ provádět s navrácenými daty. |
||
Shoty Profil * |
a to tam mam dat nejakou prodlevu jako settimeout ?
teda spíš se ptám jestli by to settimeout pomohlo. že by se třeba po 0.1 sekunde vyvolala ta promena a cely to pokracovalo to Chamurappi: Tědka jsem si podrobně procházel dokumentaci k tomu AJAXU přez jQuery a je tam tohle: async Default: true By default, all requests are sent asynchronous (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active. Takze pokud dam async disable tak to bude čekat na odpověď ? Děkuji Chamurappi za radu, dal jsem async FALSE a už to jede. Fakt moc díky. Moderátor Joker: Monolog 4 příspěvků sloučen do jednoho. Můžete si to prosím nejdřív rozmyslet a potom psát?
|
||
_es Profil |
#25 · Zasláno: 3. 3. 2010, 18:34:44
Shoty:
„dal jsem async FALSE“ Rátaš aj s tým, že môže nastať nejaká chyba pri spúšťaní toho PHP skriptu? Dokiaľ sa nanačítajú dáta, bude JavaScript "zaseknutý". Nebolo by vhodné použiť: $.get("checks/email_exist.php", { email: inputvalue }, nazov_funkcie); |
||
Chamurappi Profil |
#26 · Zasláno: 3. 3. 2010, 18:49:09
Reaguji na Shotyho:
„Takze pokud dam async disable tak to bude čekat na odpověď ?“ Bude, ale nepoužívej to. Je to schopné zakousnout na chvíli prohlížeč (ostatně to se píše i v té dokumentaci), což je příliš velká daň za to, že neumíš zvolit správnou logiku. |
||
Shoty Profil * |
#27 · Zasláno: 3. 3. 2010, 19:37:17
[#29] Chamurappi
Já vím že to tam píšou. Ten PHP script je udělán tak že zkontroluje MySQL a jestli email existuje tak vrátí 1 a když neexistuje tak 0. Tento script se vykoná rychle (není vůbec složitý). Nebo co jsi přesně myslel tou logikou? ten kód teď vypadá takhle: var returned_email_exist; $.ajax({ async: false, type: "GET", url: "checks/email_exist.php", data: "email=" + inputvalue, success: function(returned_email_value){ returned_email_exist = returned_email_value; } }); [#28] _es Moc nevím co tím myslíš a chyba snad nenastane, takhle jak to je jsem velmi spokojen. |
||
Chamurappi Profil |
#28 · Zasláno: 3. 3. 2010, 19:49:49
Reaguji na Shotyho:
„Tento script se vykoná rychle (není vůbec složitý).“ Na tom moc nezáleží. Počítáš s tím, co se stane, když člověku v době mezi načtením stránky a přijetím odpovědi v vypadne připojení? „Nebo co jsi přesně myslel tou logikou?“ To, co potřebuješ provádět s navrácenými daty, máš provádět v callback funkci. Čemu na tom nerozumíš? |
||
Shoty Profil * |
#29 · Zasláno: 3. 3. 2010, 19:50:00
[#25] _es
"Rátaš aj s tým, že môže nastať nejaká chyba pri spúšťaní toho PHP skriptu?" Když nastane chyba tak to prostě vrátí to co to vypsalo, takže se není čeho obávat. Pro Joker Sorry, budem si dávat větší pozor :) |
||
Shoty Profil * |
#30 · Zasláno: 3. 3. 2010, 19:52:47
[#28] Chamurappi
Když člověku vypadne připojení tak se nic nestane. Ten script pouze načítá data (v žádném případě je nezapisuje!) Takže by vše mělo být ok. Rád bych prováděl operace v callback funkci ale mám tam složité podmínky takže to musím takhle zařadit do dokumentu pomocí proměné a navíc se nic špatného stát nemůže. |
||
Téma pokračuje na další straně.
|
0