« 1 2 »
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
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
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 *
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
Shoty:
a existuje nějaké řešení ?
Riešenie čoho?
Čo vlastne chceš?
Shoty
Profil *
No že někdě něco definuji ve funkci apak to volně používat i mimo funkci
Shoty
Profil *
Prostě to co mám v příkladě.
Chamurappi
Profil
Reaguji na Shotyho:
Jestli chceš s proměnnou pracovat mimo funkci, musíš ji vytvořit mimo funkci. Čemu na tom nerozumíš?
Shoty
Profil *
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
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 *
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 *
oprava:

$.get("checks/email_exist.php", { email: inputvalue }, function(returned_email_value){
var x;
function f(){x = returned_email_value;}
});
Shoty
Profil *
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
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 *
Ano, jedná se o jQuery (AJAX funkce)

Jede to. Děkuji.
Shoty
Profil *
Hmm tak to bohužel taky nejede :( protože x vrátí UNDEFINED
Chamurappi
Profil
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
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 *
Takhle to udělá alert s: hodnotou - tak to funguje
Shoty
Profil *
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 *
_es máš prosím nějaké nápady ?
_es
Profil
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
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
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);
kde nazov_funkcie je názov globálnej funkcie, v ktorej sa ti vykonajú všetky potrebné operácie?
Chamurappi
Profil
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 *
[#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
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 *
[#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 *
[#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.
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0