« 1 2
Autor Zpráva
quatzael
Profil
CZechBoY, Radek9:
Houby, nefunguje to ..

To s těma callbackama dělají to, že ta celá funkce nazvaná ajax konečně vrací hodnotu true, ale zase to nějak úplně ignoruje tu funkci $.when, ta se prostě nespustí..
Chamurappi
Profil
Reaguji na quatzaela:
Já vím co to je asynchronnost. Proto jsem to vlákno taky podle toho nazval, že ten problém s tou asynchronností potřebuju vyřešit.
Asynchronnost není problém, který by se musel nějak řešit, je to přirozená vlastnost fungování událostí, se kterou se musíš naučit přemýšlet.

Jenže já tam těch ajaxů budu mít víc.
To mi přijde jako blbost. Proč bombardovat server hromadou dotazů, když stačí jeden?

Doporučení typu "přečti si znovu vlákno" tady dostávám celkem často
Tady bych ti to asi doporučil také :-)
Motáme se tu stále kolem dokola. Zapomeň na to, že by nějaké řešení asynchronnosti mohlo existovat, tedy že by jakákoliv tvá funkce mohla vracet přímo to, co vrací server. Tak to nefunguje. Návrat dat ze serveru je událost, která se spustí později, ty do success napíšeš, co se má dít, až data přijdou, žádná větší věda v tom není…


Reaguji na CZechBoye:
On chce synchronní dotaz, nebo ne?
Možná chce, ale nikdo nikdy nechce async: false. Zaseknutí prohlížeče je nežádoucí. Na mobilech se pak stává, že systém kvůli jednomu pomalejšímu požadavku odstřelí prohlížeč…


Reaguji na Radka9:
Využít promise-pattern (v jQuery Deferred)
To je zrovna taková vzácně používaná věc. Má i nějaké přednosti, když se čeká jen na jednu akci, nebo je to jen cukr?
Radek9
Profil
CZechBoY:
On chce synchronní dotaz, nebo ne?
A já ti vysvětlil jeho nevýhody. Takže ho, prosím, znovu nenabádej, aby ho používal.

quatzael:
Nepoužívej synchronní requesty. Když prostě připíšeš do tvého scriptu můj script z [#26], minimálně ti to ve stejnou chvíli vyalertuje obě hodnoty. Pokud ne, pošli chybu. Potom už je to jednoduché přepsat do události. Na konci vrátíš false a při when ověříš všechny hodnoty a případně vypíšeš chyby, nebo submitneš form.


Chamurappi:
Má i nějaké přednosti, když se čeká jen na jednu akci, nebo je to jen cukr?
U jedné akce většinou stačí callback. Problém nastává, když potřebuješ po akci přidat další. Potom už vzniká tzv. callback hell a promise-pattern je mnohem přívětivější varianta. Pomocí ní se to totiž dá zřetězit:

asyncAction1()
  .then(function (res) {
    return asyncAction2(res);
  })
  .then(function (res2) {
    // …
  });
quatzael
Profil
Radek9:
Když prostě připíšeš do tvého scriptu můj script z [#26],
Já jsem ho tam zkoušel, ale prostě to nefungovalo, vůbec ta funkce when neproběhla..
Radek9
Profil
quatzael:
Mohu tedy požádat o odkaz na živou ukázku?
quatzael
Profil
Radek9:
Sorry, už to funguje. Teď myslím s těma callbackama. Tu druhou funkci mám ve skutečnosti se dvěma argumentama a třetí měl být ten callback a asi jsem prve nějak přehlídl, že tam chybí ten druhý argument.. Konzoli jsem neměl spuštěnou, moje chyba..

Ale bez ohledu na to mý přehlídnutí, to Tvoje řešení bez callbacku opravdu nefungovalo..

Ještě upřesnění: z php scriptu nakonec posílám teď true jako řetězec: echo "true";

Je potom jedno jestli použiju kteroukoli z těchto podmínek?
if (answer)
if (answer == "true")
if (answer === true)

Chamurappi:
To mi přijde jako blbost. Proč bombardovat server hromadou dotazů, když stačí jeden?
Chápu co tím myslíš, ale já tam mám víc takových funkcí, který používají jednotlivý ajaxy. Budu tam mít cca 5 ajaxů a hafo funkcí, které využívají nahodile jen některé z těchto ajaxů. Těch kombinací by bylo až 31, samozřejmě bych asi nevyužil všechny, ale i tak psát zbytečně 10 funkcí mi přijde docela hodně.. Nebo bych musel udělat jednu ajaxovou funkci a do ní vložit plno argumentů, aby to potom vyplivlo jen ty výsledky, které právě potřebuju..

Chamurappi:
Tak to nefunguje.
Ale mě to teď s tou funkcí $.when() a těma callbackama funguje...
Radek9
Profil
quatzael:
Ale bez ohledu na to mý přehlídnutí, to Tvoje řešení bez callbacku opravdu nefungovalo..
Tak to je potom zvláštní, že mi funguje.

Je potom jedno jestli použiju kteroukoli z těchto podmínek?
Pokud vrací true, pak ho v JS dostaneš jako řetězec a spolehlivě bude fungovat pouze podmínka answer === "true".
quatzael
Profil
Radek9:
Tak to je potom zvláštní, že mi funguje.
Měls pravdu, už mi to taky funguje, asi jsem tam nějak umazal nějakou závorku navíc spolu s těma callbackama..


Všechno mi teď už asi funguje, díky všem za rady!!:o)
Chamurappi
Profil
Reaguji na quatzaela:
Budu tam mít cca 5 ajaxů a hafo funkcí, které využívají nahodile jen některé z těchto ajaxů.
Pořád nechápu, proč nejdou spojit do jednoho.

Nebo bych musel udělat jednu ajaxovou funkci a do ní vložit plno argumentů
Můžeš předávat objekt. Do $.ajax také předáváš data. Řekl bych, že se snažíš $.ajax zbytečně zabalit. Callback je proměnlivý, data jsou proměnlivá…


Reaguji na Radka9:
Problém nastává, když potřebuješ po akci přidat další. Potom už vzniká tzv. callback hell
To moc často potřeba není. Když se na sebe neštosuje pět AJAXů :-)
quatzael
Profil
Chamurappi:
Pořád nechápu, proč nejdou spojit do jednoho.
Šlo by to, ale musel bych pak všechny stávající funkce předělávat a bylo by to moc dlouhý..


Takhle je to ok. Každopádně díky.
Chamurappi
Profil
Reaguji na quatzaela:
a bylo by to moc dlouhý
Nevěřím.
Víš, že do $.ajax({ …, data: něco, … }) jde dát proměnná? Že se tam dává obyčejný objekt, který můžeš vytvořit var něco = {} a libovolně doplňovat přes něco.položka = "hodnota"?
quatzael
Profil
Chamurappi:
Víš, že do $.ajax({ …, data: něco, … }) jde dát proměnná? Že se tam dává obyčejný objekt, který můžeš vytvořit var něco = {} a libovolně doplňovat přes něco.položka = "hodnota"?
To všechno chápu (proměnný ajaxem posílám), ale jde o to, že v některé funkci budu potřebovat ze serveru ověřit například tři položky v jiné funkci, pět úplně jiných položek a v další třeba zase jen jednu. Takže mít na tohle všechno jen jednu ajaxovou funkci mi připadá trochu zbytečně přehnaný.
Chamurappi
Profil
Reaguji na quatzaela:
(proměnný ajaxem posílám)
Myslel jsem to tak, že celá struktura předávaná do data může být proměnná, kterou něco někde postupně naplnilo.
Můžeš mít stále jen jedno volání $.ajax a přes něj klidně posílat pokaždé jiný počet položek…
rafej
Profil
quatzael:
... v některé funkci budu potřebovat ze serveru ověřit například tři položky v jiné funkci, pět úplně jiných položek a v další třeba zase jen jednu. Takže mít na tohle všechno jen jednu ajaxovou funkci mi připadá trochu zbytečně přehnaný.

Vtip je v tom, že vytvoření ajaxového požadavku, konfiguraci a správu běhu můžeš mít jako zvláštní funkce. Pak funkci, která spravuje a vyhodnocuje běh požadavku, jen předáš parametrem název funkce, které má konkrétní výsledek předhodit a ta může výsledek zpracovat. Zbytek - ty předchozí 3 funkce, které se na realizaci tohoto procesu podílejí, mohou být stejné a neměnné, maximálně je můžeš třeba parametrizovat.
« 1 2

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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