Zadejte hledaný výraz...

JSONP return hodnota

Michal Skoula
verified
rating uzivatele
(18 hodnocení)
21. 2. 2013 14:07:59
Dobrý den,
mám následující funkci která mi ajaxem vrací hodnotu z JSONu. Chtěl bych z ní získat data, ne je jen vypsat na stránku. Return nefunguje (vrací undefined), myslím, že se provede dřív, než jsou k dispozici data. Je nějaký jednoduchý způsob jak přinutit tu funkci aby vracela data?
21. 2. 2013 14:07:59
https://webtrh.cz/diskuse/jsonp-return-hodnota#reply869275
Macejko.sk
verified
rating uzivatele
(5 hodnocení)
21. 2. 2013 14:21:13
tak tvoja function(data) je akoby callback funkcia, takze return nemoze nastat skor ako ajax uspesne vrati odpoved,
ak chces pristupovat k JSON-u musis ist bud cez $.each cyklus
napr.
$.each(data, function(index){
alert( data.id );
// jednoducho k data pristupjes ako data.nazovMysqlStplca
});
ak vies ze vracias prave jeden vysledok, prave jeden riadok tak mozes pristupovat rovno bez $.each cyklu
return data.id;
21. 2. 2013 14:21:13
https://webtrh.cz/diskuse/jsonp-return-hodnota#reply869274
Je správná URL? Neobsahuje dva otazníky?
Vrací server správný callback, podle parametru callback?
Vrací správná data? Obsahují data id?
Michal Macejko: Vždyť nevíte, v jakém formátu dostává zpět data. $.each nemusí být vůbec nutný.
21. 2. 2013 14:23:56
https://webtrh.cz/diskuse/jsonp-return-hodnota#reply869273
Michal Skoula
verified
rating uzivatele
(18 hodnocení)
21. 2. 2013 14:33:16
Pokud v té funkci udělám alert místo return, funguje to. Ale já potřebuji data vrátit, ne vypsat.
To procházení polem bohužel nepomáhá.
21. 2. 2013 14:33:16
https://webtrh.cz/diskuse/jsonp-return-hodnota#reply869272
Každopádně bych ověřil bych jestli je data != null a pak něco dělal s jeho properties. Každopádně k odhalení chyby doporučuju Fiddler (www.fiddler2.com), kde bude dobře vidět co server vrací a Firebug (nebo jiný debugger na JavaScript) - stačí si dát breakpoint do té callback funkce a hned uvidíš co obsahuje data, příp. data.id.
---------- Příspěvek doplněn 21.02.2013 v 14:38 ----------
Napsal Michal Škoula;912857
Pokud v té funkci udělám alert místo return, funguje to. Ale já potřebuji data vrátit, ne vypsat.
To procházení polem bohužel nepomáhá.
Ta funkce userExists ti určitě nic nevrátí, protože zavolá ten Ajax a skončí. Jestli potřebuješ aby ti to vracela, tak to volání serveru udělej synchronně.
21. 2. 2013 14:35:25
https://webtrh.cz/diskuse/jsonp-return-hodnota#reply869271
Michal Skoula
verified
rating uzivatele
(18 hodnocení)
21. 2. 2013 14:38:24
Napsal matejka;912858
Každopádně bych ověřil bych jestli je data != null a pak něco dělal s jeho properties. Každopádně k odhalení chyby doporučuju Fiddler (www.fiddler2.com), kde bude dobře vidět co server vrací a Firebug (nebo jiný debugger na JavaScript) - stačí si dát breakpoint do té callback funkce a hned uvidíš co obsahuje data, příp. data.id.
Pokud udělám ve funkci return a ten vypíšu alertem, je výsledek undefined. Hned po něm ale vyskočí druhý alert, rovnou z té callback funkce, se správným výsledkem, takže tady chyba nebude.
---------- Příspěvek doplněn 21.02.2013 v 14:39 ----------
Napadá mě udělat v té funkci časovač co každých 100ms zjistí, zdali už data.id nebo data != null a pokud to bude mít nějakou hodnotu, vrátí ji.
21. 2. 2013 14:38:24
https://webtrh.cz/diskuse/jsonp-return-hodnota#reply869270
Macejko.sk
verified
rating uzivatele
(5 hodnocení)
21. 2. 2013 14:39:25
Hm. Ale napada ma ze podobny problem som riesil ja prednedavnom, ze nechcela pockat na moj ajax success. Skus pouzit toto-->
Najdolezitejsie je to nastavenie: async: false. Najlepsie vysvetlenie co som nasiel:Setting async to false means that the statement you are calling has to complete before the next statement in your function can be called. If you set async: true then that statement will begin it's execution and the next statement will be called regardless of whether the async statement has completed yet.
$.ajax({
url: 'script_update_order.php',
type: 'POST',
dataType:'json',
data: {},
async: false,
cache: false,
timeout: 2000,
success: function(data){ return data.id }
});
});
---------- Příspěvek doplněn 21.02.2013 v 14:41 ----------
]Napadá mě udělat v té funkci časovač co každých 100ms zjistí, zdali už data.id nebo data != null a pokud to bude mít nějakou hodnotu, vrátí ji.
casovas nebude fungovat, zacykli sa to donekonecna.. uz som to takto skusal aj ja
21. 2. 2013 14:39:25
https://webtrh.cz/diskuse/jsonp-return-hodnota#reply869269
Aha, už to vidím.
Funkce userExists() nic nevrací, neobsahuje return
Vrací tedy implicitně undefined
Výsledek vrací callback, ale ten se volá asynchronně. Musíte se ho tedy taky zeptat asynchronně.
Rychlá úprava
21. 2. 2013 14:43:26
https://webtrh.cz/diskuse/jsonp-return-hodnota#reply869268
Příklad jak to volat synchronně (píšu z hlavy, možná si budeš muset doladit syntaxi, středníky atd.):
21. 2. 2013 14:49:42
https://webtrh.cz/diskuse/jsonp-return-hodnota#reply869267
Michal Skoula
verified
rating uzivatele
(18 hodnocení)
21. 2. 2013 15:12:10
Zatím mi nic nefunguje. Upravil jsem kód od matejka, přidal jsem ?callback=?, dataType: 'jsonp' a hází mi to divnou chybu.
https://docs.google.com/file/d/0B7R6LRWBrXwVT0tkdFRvd2N3dlk/edit?usp=sharing
---------- Příspěvek doplněn 21.02.2013 v 15:12 ----------
Kód od Martina vrací undefined.
21. 2. 2013 15:12:10
https://webtrh.cz/diskuse/jsonp-return-hodnota#reply869266
userExists() vrací samozřejmě undefined
Výsledek JSON dotazu dostane ke zpracování funkce confirmUser()
21. 2. 2013 15:15:06
https://webtrh.cz/diskuse/jsonp-return-hodnota#reply869265
Michal Skoula
verified
rating uzivatele
(18 hodnocení)
21. 2. 2013 15:20:38
Aha, už jsem to pochopil, díky za vysvtlení. Už mi to funguje.
---------- Příspěvek doplněn 21.02.2013 v 15:24 ----------
Já jsem na tom právě nepochopil to že výsledek dostane jiná funkce. Teď už je to jasné.
21. 2. 2013 15:20:38
https://webtrh.cz/diskuse/jsonp-return-hodnota#reply869264
Pro odpověď se přihlašte.
Přihlásit