Autor Zpráva
Fibi
Profil *
Ahoj
v JS nemám moc zkušeností a snažím se zprovoznit JS kontrolu formuláře v okamžiku odeslání.
Moje teze je taková že při odesílání formuláře se pomocí onsubmit zavolá funkce data z formuláře vezme a pomocí ajaxu je pošle ke kontrole na server.
Vrací true / false aby se formulář odeslal / neodeslal. (+ ta funkce označuje chybné položky atd.)
A můj problém je, že call back funkce v jquery metodě post mi nenastaví promněnou na true/false kterou pak vracím.
Snad pomůže ukázka :

//var navrat = 'nic'; //pokus o definice promnene uplne globalne, taky bylo k nicemu
function rezervace_kontrola(formular) {

    var navrat;//definuji promnenou navrat ve funkci, tedy ji maji udajne videt i funkce uvnitr
    dataString = $(formular).serialize();
    $.post("http://"+window.location.hostname+"/pro_ajax.php?co=2", dataString, 
    function(vystup) {
        if (vystup == 'true') {
            navrat = 'true' ;//a tohle nemaka
        } else {
            //zaroven kontroluji jestli jsem dostal opravdu JSON format
            var vystup_json = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(vystup.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + vystup + ')');
            $.each(vystup_json, function(key, value) {
                $('label[for="'+key+'"]').addClass('chyba');//tyady barvim chybna pole na cerveno
            });
            navrat = 'false' ;//a tohle nemaka
        };
    });
    
    alert(navrat);
    return false ;
};//rezervace_kontrola

Tedy promnena navrat by mela mit bud hodnotu false, nebo true, ale má stále hodnotu 'nic'.
Už fakt nevím proč.
Kajman
Profil
Nejspíše používate asynchroní požadavek, který zpracovává fukci nastavující navrat až po alertu. Při synchroním přístupu ($.ajaxSetup({async:false});) by se to mohlo chovat, jak čekáte.
Fibi
Profil *
Ano je to přesně tak, stačilo doplnit ten kód. Díky moc, jste záchrana :-)
Jen nevím když to takhle přepnu, bude to přepnuté jen v této funkci, nebo globálně pro celé jquery ?
Pak bych to musel u každého AJAX požadavku nastavovat. Což úpravda není žádná trága.
Nox
Profil
http://api.jquery.com/jQuery.ajaxSetup/
"Set default values for future Ajax requests."
'Nastaví výchozí hodnoty pro budoucí Ajaxové požadavky'
Kajman
Profil
Fibi:
Pokud si $.post přepíšete na $.ajax (klidně s metodou POST), tak můžete async nastavit pro jedno místo jen v tom volání.

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:

0