NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Kontrola dostupnosti přezdívky (nevím si rady)

V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
tom.ondrej
Člen
Avatar
tom.ondrej:16.12.2015 0:20

Dobrý den,
mám problém s tímto kódem:

//Kontrola dostupnosti přezdívky
        var prezdivka_vyraz = "^[a-žA-Ž0-9]{1,20}$";
        if(parametry['prezdivka'].match(prezdivka_vyraz)){
            console.log('prezdivka odpovida vyrazu');
            $.get("php/funkce/OvereniPrezdivky.php", {prezdivka:parametry["prezdivka"]}).done(function(vysledek){
                console.log(vysledek);
                if(vysledek == 'volno'){
                    spravnost['prezdivka'] = true;
                    console.log(spravnost['prezdivka']);
                }
                else{
                    spravnost['prezdivka'] = false;
                    console.log(spravnost['prezdivka']);
                }
            });
        }
        else {
            console.log('prezdivka neodpovida vyrazu');
        }
        console.log("Poslední: " + spravnost['prezdivka']);

Problém je v tom, že se nějak nechce spravnost['prez­divka'] uložit a příkazy se vykonávají nezvykle.
Pokud zadám do formuláře 'xxxx', tak se mi v konzoli objevuje

  • prezdivka odpovida vyrazu
  • Poslední: undefined
  • obsazeno
  • false

To znamená že se nejprve vykoná ten první log (prezdivka odpovida vyrazu). Potom se vykona poslední log za podmínkou, tudíž informace o validní/nevalidní přezdívce z funkce vyjde jako undefined. Potom se vykoná 2. a 3. log. Už nad tím sedím dost dlouho a nedaří se mi najít řešení. Nemohl by mi někdo pomoc? Už začínám propadat zoufalství.
Jinak ten php kód vypadá takto (pro orientaci) co to vrací:

<?php
include "../tridy/Databaze.php";
$spojeni = Databaze::pripojSe();
$prezdivka = $_GET['prezdivka'];

$dotaz = $spojeni->prepare("SELECT id FROM uzivatele WHERE prezdivka = ? ");

$vysledek = $dotaz->execute(array($prezdivka));

if($vysledek){
    $radek = $dotaz->fetch(PDO::FETCH_ASSOC);
    if(!isset($radek['id'])){
        echo "volno";
    }
    else{
        echo "obsazeno";
    }
}
else {
    echo "obsazeno";
}

Děkuji moc za Vaše odpovědi.

Editováno 16.12.2015 0:21
Odpovědět
16.12.2015 0:20
Talk is cheap. Show me the code --- Linus Torvalds
Avatar
tom.ondrej
Člen
Avatar
tom.ondrej:16.12.2015 9:53

Tak koukal jsem na to a funkce .done() se chová dost podivně. Nejprve se vykoná celý dokument a potom až funkce .done, takže pokud kód vypadá takto:

$(document).ready(function(){
            console.log('prvni');
            $.get("ajax.php",{value:''}).done(function(data){
                console.log('druhy');
            });
            console.log('treti');
            console.log('ctvrty');
        });

v konzoli se objeví

  • prvni
  • treti
  • ctvrty
  • druhy

Takže bych chtěl upravit dotaz: Nevíte někdo o funkci v jQuery nebo v holém JS na práci s ajaxem, která se nevykoná takhle divně (vykoná se v klasické posloupnosti kódu řádek po řádku)?

Nahoru Odpovědět
16.12.2015 9:53
Talk is cheap. Show me the code --- Linus Torvalds
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 2 zpráv z 2.