Autor Zpráva
quatzael
Profil
Jak by se dalo vyřešit pomocí proměnné něco takového:
if (condition)
somefunction(a,b);
else
somefunction(a,b,c,d);

Jde mi o to, že to potřebuju ve funkci $.when() a ta je hodně dlouhá, takže mi to připadá zbytečný vypisovat celý dvakrát..
Chamurappi
Profil
Reaguji na quatzaela:
Vyřešit to jde, ale podle minulého dotazu mi připadá, že nerozumíš základům, a proto se zbytečně topíš v nějakém syntaktickém guláši. Naposledy, když ti někdo poradil něco chytrého, jsi skončil u when místo toho, abys našel normálnější řešení bez proměnlivého počtu AJAXů. Takže ti přesnější radu, než název metody apply, nedám.
quatzael
Profil
Chamurappi:
jsi skončil u when místo toho, abys našel normálnější řešení bez proměnlivého počtu AJAXů
Jo protože, jednak mám už všechny ty skripty napsaný a musel bych je zdlouhavě předělávat a za druhý bych musel mít na straně serveru nějakej ohromnej php script, kterej by uměl zpracovávat všechny varianty. Případně více php scriptů s různými kombinacemi úloh, podle toho, které zrovna ty funkce potřebují (za předpokladu, že pomocí argumentu ve funkci budu přidávat i cestu k souboru PHP)


Prostě tím AJAXEM potřebuju vyřešit nahodile cca 3 úlohy z cca 20. Tak mi připadá daleko jednodušší dát tam ty tři AJAXY, než tam vkládat složitý argumenty a potom na straně serveru složitě řešit kolik kterých úloh se zpracuje a jakým způsobem.


Funguje to apply ve všech prohlížečích? To můžu vložit jednak do toho $.when tak i do toho .then()?
A do toho pole můžu vkládat i proměnné?
Třeba takhle:
var fun1 = ajax1(value1);
var fun2 = ajax2(value2);
var fun = array(fun1,fun2);
var res = array('result1','result2');
$.when.apply(this, fun).then(function (this, res) {
  if (result1)
  alert(result1);
  if (result2)
  alert(result2);
});
_es
Profil
quatzael:
Tá tvoja argumentácia je, ako keby automobilka vyrobila auto, na ktorom by sa trebárs dali otvárať len všetky okná súčasne, lebo sa návrhárom a mechanikom tak lepšie „pracovalo s funkciami“. Obávam sa, že ak ti budú poradené ešte nejaké zlepšovadlá, tak z toho „syntaktického guláša“ bude niečo také ako z rozprávky „Ako psíček a mačička piekli tortu“.
quatzael
Profil
_es:
No v tomhle se podle mě pleteš. Já vytvářím aplikaci tak, aby byla user-friendly pro uživatele, to jak to bude vypadat ve scriptě je pro uživatele jedno, pokud bude script správně běžet. Podle mě když se tam spustí při odesílání formuláře dva nebo tři ajaxy vůbec neva, protože uživatel očekává, že při odesílání formuláře bude chvílí čekat a ty tři ajaxy to zase tolik nezdrží.
Já tady vysvětluju, že všechny php skripty a i js funkce mám už naprogramovaný a stačí mi jen dořešit tuhle banalitku.
_es
Profil
quatzael:
Já vytvářím aplikaci tak, aby byla user-friendly pro uživatele
To, že umelo bezdôvodne predlžuješ výslednú reakciu zo servera len preto, že to nevieš poriadne naprogramovať sa mi nezdá ako „user-friendly“.

Podle mě když se tam spustí při odesílání formuláře dva nebo tři ajaxy vůbec neva
Vadí, lebo to bude trvať mnohonásobne dlhšie. V minulom vlákne si písal o „cca 5 ajaxoch“ - to bude reálne trvať asi viac ako 5-násobne dlhšie, keďže ti poradili vyčkávacie reťazenie cez $.when. Okrem toho si si to zjavne nijako nezjednodušil, skôr naopak. Budeš mať problém do hentakého „slížového“ spracovania napríklad doplniť ošetrenie chybových stavov a pod.
quatzael
Profil
_es:
Vadí, lebo to bude trvať mnohonásobne dlhšie.
kolikanásobně déle to bude trvat není samo o sobě tolik relevantní, záleží kolik milisekund trvá jeden ajax. Kolik z toho je připojení a kolik samotnej script. když se bavíme o jednotkách/desítkách milisekund tak to zase tolik podstatný není..
Chamurappi
Profil
Reaguji na quatzaela:
mám už všechny ty skripty napsaný a musel bych je zdlouhavě předělávat
Místo toho před sebou hranatou kouli valíš dál. Na začátku jsi nevěděl (a nechtěl vědět), jak poslat proměnlivý počet hodnot najednou jedním AJAXem, pak jsi nevěděl, jak počkat na dokončení většího množství AJAXů, a teď nevíš, jak dostat proměnlivý počet AJAXů do toho vyčkávání. Vidím v tom stále stejný problém, který chceš řešit neefektivně a hlavně zbytečně krkolomně. Místo toho, abys podmíněně naplnil data["položka"] = "hodnota" a pak celá data poslal, budeš podmíněně sestavovat pole funkcí pro argument whenu a pak kdovíjak vyhodnocovat výsledky v thenu. Co plánuješ dělat, když část AJAXových požadavků selže?

Přepisování již hotových kódů je běžným údělem začátečníků, tak hurá do toho. Můžeš buď z této slepé uličky vycouvat, nebo počkat, jestli tě někdo s velkou trpělivostí dovede k cíli.

bych musel mít na straně serveru nějakej ohromnej php script, kterej by uměl zpracovávat všechny varianty
Můžeš si ty stávající pospojovat includem. Na nějaké základní rozvětvení si klidně pošli ještě další parametr v datech, jestli ti to pomůže. Nevidím v tom žádnou velkou vědu.

Funguje to apply ve všech prohlížečích?
Ano. Ale array s malým a nefunguje v žádném, to sis dneska vymyslel, ještě neměli čas to implementovat.
Celý tvůj kód v příspěvku #3 je takový zvláštní. Představuješ si, že se pole s řetězci nějak zázračně promění v pole s argumenty nazvanými podle řetězců, a mít this jako název argumentu nejde. Chybové konzole tvých prohlížečů musejí z takového kódu sténat jednu chybu za druhou, cožpak je neslyšíš?

To můžu vložit jednak do toho $.when tak i do toho .then()?
Podle toho, co chceš s tím then dělat. Podotýkám, že $.when i then jsou zcela obyčejné JS funkce (when je metoda na $ a then je metoda na objektu, který vrací when), není to žádná speciální syntaktická konstrukce.
_es
Profil
quatzael [#1]:
Zdalo sa mi, že apply ti bolo radené na funkciu somefunction, nie na $.when, no možno sa tým podarilo len rovnaké posunutie „evolúcie aplikácie“ ďalej pomocou takýchto krokov ako už predtým.
quatzael
Profil
Chamurappi, _es:
Tak nakonec jsem to vyřešil jednoduchým if a else a mám tam tu funkci dvakrát pro každou variantu. Takže je script asi o 15 řádků delší. To není zase tak hrozný, na to že se to vyřešilo jednoduše Ctrl C, Ctrl V..

Přepisování již hotových kódů je běžným údělem začátečníků, tak hurá do toho.
Neboj, přepisuju pořád, když vidím, že je potřeba to předělat.
Ale tady opravdu žádný přínos nevidím. Vyřešil jsem to tím if.. else.. a je to. Nemusím hledat v tom množství scriptů kde všude jsem ten ajax použil a přepisovat tam nějaký argumenty, to by byly zase hodiny práce navíc..
Joker
Profil
quatzael:
jednak mám už všechny ty skripty napsaný a musel bych je zdlouhavě předělávat
Obvykle čím později se přijde na to, že to je špatně, tím horší je to předělat.
Takže lepší to předělat pozdě, než ještě později.
Přístupu „Sice to je blbě, ale už to tak je a nechce se mi to předělávat, tak k tomu jen nějak přidrátuju ty nové věci“ doporučuji se bránit jak to jde (byť uznávám, že někdy jiná možnost není, ale jde o to ji alespoň hledat).

a za druhý bych musel mít na straně serveru nějakej ohromnej php script, kterej by uměl zpracovávat všechny varianty
Ten skript bude stejný nebo menší oproti tomu, co tam je teď.

Já vytvářím aplikaci tak, aby byla user-friendly pro uživatele, (…) když se tam spustí při odesílání formuláře dva nebo tři ajaxy vůbec neva, protože uživatel očekává, že při odesílání formuláře bude chvílí čekat a ty tři ajaxy to zase tolik nezdrží.
Skvělá myšlenka:
Moje aplikace má být v první řadě user-friendly. A uživatele nezabije si na to „user-friendly“ chvíli počkat
:-)

Tak nakonec jsem to vyřešil jednoduchým if a else a mám tam tu funkci dvakrát pro každou variantu. Takže je script asi o 15 řádků delší. To není zase tak hrozný, na to že se to vyřešilo jednoduše Ctrl C, Ctrl V
Kolegové odpovídající teď zdá se budou lépe chápat rčení „sisyfovská práce“…

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: