Autor Zpráva
BuGeR
Profil
Zdravím,
mám kód:
function funkce() {
    var vysledek = 0;
    $.ajax({
        type: "POST",
        url: "soubor.php",
        success: function(r) { 
            vysledek = r;
        },
    });
    return vysledek;
}
Jak mám docílít toho, abych mohl ve funkci success měnit lokalní proměnné funkce funkce()? - v tomto případě, pokud bych zavolal funkce() tak aby to vrátilo data ze souboru.
Výše uvedený kód není funkční (sémanticky), nejspíš proto, že se vysledek = r; nastavuje jen lokalně v dané funkci v rámci success.

Děkuji
Joker
Profil
BuGeR:
Jak mám docílít toho, abych mohl ve funkci success měnit lokalní proměnné funkce funkce()?
Přesně tak jak to je napsané, ve funkci success by se měla použít proměnná vysledek z kontextu funkce funkce (jestli se nepletu).

Dotaz předpokládám směřuje na to, jak v příkazu return vrátit tu hodnotu ze success.
Odpověď zní: Nijak.
Ta podstatná věc je A v termínu AJAX, které znamená asynchronní.
Jelikož XMLHTTPRequest se zpracovává asynchronně a funkce mezitím pokračuje dál, funkce success se zavolá ve chvíli, kdy volání funkce funkce už dávno skončilo.
BuGeR
Profil
Joker:
Aha, ok děkuji za odpověď.
Neexistuje nějaká možnost, jak "počkat" na to, až se požadavek odešle a pak pokračovat dále ve funkci? (jinými slovy jak počkat na success)
Joker
Profil
BuGeR:
Jde poslat synchronní požadavek, nebo ten kód přepsat tak, aby čekat nemusel (z toho kousku není zřejmé, jak by to mělo být).
_es
Profil
BuGeR:
jak "počkat" na to, až se požadavek odešle
Ako „odošle“? Nejde predsa o odoslanie požiadavku z prehliadača, ale o načítanie odpovede zo servera. Čo myslíš tým „počkať“? Že by sa sa celý prehliadač „zasekol“ až do načítania odpovede? Veľmi praktické to nie je, no objekt XMLHttpRequest umožňuje aj to - odkaz v [#4].
Radek9
Profil
BuGeR:
Většinou se to prostě dělá tak, že potřebný kód, který pracuje s výsledkem, se dá do té success funkce.
BuGeR
Profil
Super, mám už v tom jasno.
Díky moc všem :)

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: