Autor Zpráva
Majkelju
Profil
Tento kus kódu mi na jedné stránce normálně funguje, chtěl jsem ho použít na jiné (v rámci jednoho webu) a nemůžu to rozjet. Ve formuláři mám nastaveno onSubmit="return kontrola();", takže před odesláním dat do db se mi spustí funkce kontrolující, zda už uživatelské jméno je nebo není v databázi:
function kontrola(){    
    var jmeno = self.document.forms.newPassForm.user.value;
    $("checkMail").load("checkMail.php?mail="+jmeno, function(){
        alert(jeObsazen);
    });
        
    return true; 
}

Soubor checkMail.php vypadá takto:
<?    
    include "protected/_mysql.php";
    $mail=$_GET['mail'];
    $query = mysql_query("SELECT `id` FROM `users` WHERE `name` = '".$mail."'");
    $data=mysql_fetch_array($query);
    
    if($data['id']==NULL) $jeObsazen = false;
    else $jeObsazen = true;

?>
<script>
var jeObsazen = <?echo $jeObsazen;?>

</script>

O co mi jde, je to, že pokud to dobře chápu, po provedení metody .load() můžu v následujícím function bloku používat proměnné z naloadovaného souboru. Alespoň jinde mi to takto funguje. Jenže tady mi alert nevypíše nic, respektive se ani neprovede. Nebo jak jinak vytáhnout proměnnou jeObsazen z checkMail.php?
Chamurappi
Profil
Reaguji na Majkelju:
pokud to dobře chápu, po provedení metody .load() můžu v následujícím function bloku používat proměnné z naloadovaného souboru
Ne. Elementy <script> přiřazené do innerHTML se neinterpretují.

Nebo jak jinak vytáhnout proměnnou jeObsazen z checkMail.php?
K čemu ti ta proměnná bude, když už kontrola v době přijetí odpovědi ze serveru stejně dávno vrátila true?
Majkelju
Profil
Nerozumím....mám tedy odstranit return true; na konci funkce kontrola? Zkoušel jsem to i bez returnu, ale chová se to úplně stejně jako s ním. Jak tu proměnnou tedy vydolovat?
Chamurappi
Profil
Reaguji na Majkelju:
mám tedy odstranit return true; na konci funkce kontrola?
Jestli chceš přerušit standardní odeslání, vrať false. Jestli nechceš přerušit standardní odeslání, vrať true (nebo nevracej nic). Výsledek funkce kontrola ale nemůže být závislý na asynchronně získávané informaci ze serveru.

Jak tu proměnnou tedy vydolovat?
Nevím, proč stahovaný obsah chceš ukládat do innerHTML nějakého prvku. Jestli se domníváš, že všechno, co stáhneš AJAXem, musíš vlepit někam dovnitř existující stránky, tak máš o AJAXu hodně zkreslenou představu.
Majkelju
Profil
Jinak ta proměnná se jinde, než v té funkci používat nebude. Potřebuju ji jen do podmínky, zda vyhodit nebo nevyhodit alert (což v ukázce výše zatím nemám)


Chamurappi:
No taky netvrdím, že se v AJAXu bůhvíjak vyznám :) Co vím, tak bych místo .load() mohl použít třeba .get(), ale zatím jsem potřeboval používat spíš .load, takže se mi do .get nechtělo, navíc mi to přišlo skoro stejné. Takže musím použít .get() místo .load() a pak mi to uvnitř následného function bloku půjde vypsat?

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:

Prosím používejte diakritiku a interpunkci.

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