AJAX nám umožňuje vyměňovat data na webu na pozadí. To samé nám kdysi umožňoval frameset, který je dneska hromadně zamítnutý. Opravdu se AJAX tak liší od frameset ?

Jakej je účel AJAXu ? Vyměnit si data s databází aniž by se musela načítat znovu celá stránka. Dalo by se říct, aniž by se musel odesílat http požadavek, ale ten se samozřejmě na pozadí odesílá. Dává nám to možnost tvořit velice pěkné aplikace, vyvolávající dojem, že jde o klasické systémové aplikace (kde se také nenačítá po každém kliknutí celý program). Ale ...

Co tu bylo před AJAXem ?

Dříve se vytvářely weby přes tzv. framy. Stačilo se podívat do zdrojového kódu a u většiny webů jste nespatřili obsah, nýbrž pár řádek definující rámy. Pro příklad se můžete podívat do zdrojového kódu webu jednoho mého profesora (devden.wz.cz).

Tento způsob vytváření webu je dnes naprosto odsuzovaný a není divu (resp. je DIVu icon_smile.gif). Web se totiž strašně rychle rozšiřuje a indexovat všechny stránky manuálně je nemožné. Tak odešla éra katalogů a přišla éra vyhledávačů, které weby indexují automatizovaně. Jenže ejhle, robot přijde na Váš web s rámy a nevidí žádný obsah, odejde a vy budete rádi, když zaindexuje alespoň root webu. Nicméně možnost načítat pouze část webu tu byla.

Nevýhody: Naprosto nevhodné pro vyhledávače, některé prohlížeče rámy nepodporují.

Fajn takže weby se začali dělat za pomocí CSS a prvků, které mají minimum defaultních parametrů (div a span). Vyhledávače vesele indexovaly, ale ejhle, web se musí načítat celý. Např. při každém hlasování v anketě (kde možnost načítat pouze kousky webu má své uplatnění) se musel načíst celý web. Nejen že to je pomalé a spojené s načítáním celého okolního obsahu, který se nijak nemění, ale také s obtížným napozicováním uživatele zpět do míst, kde byl předtím.

Co tedy s tím ? No jistě, přišel AJAX.

Problém je v tom, že stránka upravená pomocí AJAXu, se v URL nijak neliší od té původní, tedy ani pro vyhledávač se nijak neliší. Udělejte si web, který bude krásně načítat články, aniž byste načítali celou stránku a uvedete je do zapomnění vyhledávačů. Robot si neprojede Vaše skvělé onclick, onchange a jiné on-whatever, prostě uvidí jednu stránku.

Nevýhody: Naprosto nevhodné pro vyhledávače, někteří uživatelé nemají JavaScript.

V čem je rozdíl ?

Čím jsme si proboha s AJAXem pomohli ? Možná tak v tom, že během výměny dat můžeme uživateli poskytnout krásnou loading animaci (někteří dokonce nechávají tyto vyměňovací skripty uměle chvíli spát, aby se animace ukázala).

Já jsem jinak zastánce AJAXu, je to skvělá věc, s kterou se dají dělat nádherné (nefunkční) weby. Ale není to pak to samé, jako byste napsali krásný web, pustili ho v Opeře, byli nadšený a tím to haslo? Pak totiž přijde uživatel se svým IE nebo osvícenec s Firefoxem a ejhle ... jinak započítanej margin s paddingem a web je naprosto rozhozenej.

Byla by to práce pro webmastera, né pro lidi. Webmater by byl nadšený svou nádhernou interaktivní grafický pěknou aplikací, pro lidi kolem však nepoužitelnou a škaredou.

Otázka zní. Přijde technologie, za pomoci níž se bude moci načítat obsah na pozadí a zároveň by byla použitelná pro vyhledávače a všechny uživatele ?

13 komentářů

Neváhejte napsat k článku komentář

Nevyplňujte:

  1. 1
    xergic

    Nesouhlasím, nicméně si myslím, že AJAX není dokonalý (vždyť to je taky spojení dvou již existujících technologií) a že něco jiného by se hodilo. Ale kdy to bude hotové? Za pět deset let?

    AJAX je dobrá věc, ale jen v určité míře. Když se použije třeba při odesílání formuláře, nebude server tolik zatížený HTTP požadavky (a pokud je na stránce třeba třicet obrázků...). Pokud se ale použije na příklad, který popisuješ (přepínání článků), není to nejlepší nápad.

    AJAX je v mnoha věcech lepší než rámy - už jenom v tom, že šetří server a pásmo. Z dob, kdy prohlížeče nepodporovaly rámy, už jsme dávno pryč a dnes má naprostá většina uživatelů (98 %) Javascript zapnutý.

    AJAX není ztráta času, je tu, protože nic lepšího zatím není. Změnit to může akorát SilverLight, ale ten bude mít o dost menší podporu než má teď Javascript. A než se něco nového dostane do prohlížečů, tak už možná budeme v důchodu...

    • Na komentář odpověděl(a) Antonín Daněk v komentáři #4
  2. 2
    Radek Hulán

    radek<zavináč>hulantečkacz

    Za AJAX a moderní web děkujme Microsoftu, ten vynalezl XMLHttpRequest() a mnoho dalších technologií. Microsoft je vůbec špičkový inovátor, problém je, že přichází často příliš brzo (o řadu let) s technologiemi, které konkurence bude teprve za 5-6 let zavádět a chápat.

    ActiveX je příklad staré a přitom dokonalé technologie jak primitivní HTML oživit, a provozovat na webu skutečné aplikace. XMLHttpRequest() je jeho součástí...

    Dnes se k tomu vracíme a ActiveX se "posmíváme". Přitom to je průkopník.

    • Na komentář odpověděl(a) Antonín Daněk v komentáři #4
  3. 3
    kuba

    Ale vždyť můžeš použít Ajax jenom na něco. Je blbost ho používat na cokoliv, takže to vyhledávače nemusí (a nemá) ovlivnit.

    • Na komentář odpověděl(a) Antonín Daněk v komentáři #4
  4. 4
    Antonín Daněk

    danek<zavináč>antonindanektečkacz

    >xergic: Máš pravdu, je tu, protože nic lepšího zatím není. Dá se zkrátka použít jenom na něco a navíc programátor musí napsat alternativní verzi, která AJAX nevyužívá.
    Z toho, že 98% uživatelů má JavaScript zapnutý se nedá vycházet. Už jen kvůli mobilním zařízením, na které je třeba začít brát ohled.

    >Radek Hulán: To, že je XMLHttpRequest() dílo Microsoftu vím, rozhodně bych ale neřekl že Microsoft je nějakej inovátor, kterej přichází s technologiema, který jsou pro ostatní nepochopitelný. Naopak, když Microsoft přijde s něčím novým, tak se tomu hned většina podniků začne přizpůsobovat. Ostatně co mají dělat ? Když Microsoft vyplivne nějakej novej formát a celý stádo ho začne používat, tak nemají na výběr.

    >kuba: Samozřejmě, můžu používat co chci. Tady jde o to, že není možnost vyměňovat data na pozadí, aniž bych tím nezničil přístupnost webu.

    • Tento komentář je reakcí na příspěvek #1, který napsal(a) xergic
    • Tento komentář je reakcí na příspěvek #2, který napsal(a) Radek Hulán
    • Tento komentář je reakcí na příspěvek #3, který napsal(a) kuba
  5. 5
    Fred

    To, že lidi používají Ajax špatně a neošetří stav kdy je vypnut js a pro vyhledávače je jen jejich lenost nebo neznalost. Jednoduchý příklad, který tímto netrpí: http://xy.wz.cz/ajax-simula...include/

    • Na komentář odpověděl(a) Antonín Daněk v komentáři #7
  6. 6
    Aan

    vdaka za fajn vysvetlujuci clanok, s ajax nemam dobre skusenosti, vacsinou sa mi to spaja s pomalymi narocnymi strankami a obcasnou nefunkcnostou niektorych veci ktore by fungovat mali ale vdaka vyssiemu zabezpeceniu nefunguju

    • Na komentář odpověděl(a) Antonín Daněk v komentáři #7
  7. 7
    Antonín Daněk

    danek<zavináč>antonindanektečkacz

    >Fred: Moc pěknej příklad. Jenže to hrozně snižuje krásu AJAXu, když musíš ke všemu psát alternativu. A jsou i případy, kdy se dělá těžko.
    Například formulář, kde jsou dva selecty, přičemž jeden mění nabídku na základě volby u toho druhého (používá se to často např. při zjišťování kraje - města).

    >Aan: AJAXový aplikace bývají spíše rychlejší (nepřenášejí se zbytečný data, který zůstávají stejné). Ale JavaScript se vyhodnocuje na straně klienta, takže je možný že s pomalým počítačem a náročnou aplikací jsou pomalejší.

    • Tento komentář je reakcí na příspěvek #5, který napsal(a) Fred
    • Tento komentář je reakcí na příspěvek #6, který napsal(a) Aan
  8. 8
    Radek

    Pokazde zalezi na typu aplikace a ulohy:
    - delam jednoduchy web? Je mozna zbytecne pouzit AJAX.

    - delam administratorske rozhrani a napojenim na DB? Pouziju ho. Se psanim dvou ruznych rozhrani s a bez AJAXu take nesouhlasim. Vzdy zalezi jake pri vyvoji pouzivate nastroje a knihovny. Napriklad balik DHTML Suites nabizi pri pouziti formulare vyuzit AJAX a nebo ho nepouzivat. Staci pouze prepnout...

    Takze je AJAX hloupost a ztrata casu? Jak kdy... Pokud autor pouzije tuto technologii v nevhodnem pripade tak urcite ano. Jinak si toto nemyslim

  9. 9
    Onecar

    onecar<zavináč>volnytečkacz

    Nesouhlasím.

    1.) Správný AJAX je napsán tak, že i když klient nepodporuje JavaScript, je mu automaticky bez jeho vědomí poskytnuta alternativa, která na 100% funguje. Např. takový odkaz , který má vyplněn atribut "href", ale při kliknutí na něj nebudeš nikam přesměrován, nýbrž se vyvolá funkce v atributu "onClick". Pokud JavaScript nemáš, tak se provede "href" a funkčnost by měla být stejná.

    To, že někteří používají AJAX špatně, ještě nedělá AJAX špatným.

    • Na komentář odpověděl(a) Antonín Daněk v komentáři #10
  10. 10
    Antonín Daněk

    danek<zavináč>antonindanektečkacz

    Ale jistě, že většinou lze napsat alternativní verzi. Nicméně to, že člověk musí psát nějakou alternativní verzi, ho činí špatným. To samý už v podstatě psal Fred.

    Napiš alternativní verzi třeba pro GoogleDocs. icon_smile.gif Zkrátka jak už zde taky bylo řečeno, člověk musí vědět kde ho použít a kde ne.

    To všechno ale nic nemění na faktu, že ta technologie samotná má dost vážný úskalí. To, že se dají obejít jinou technologií je věc jiná.

    • Tento komentář je reakcí na příspěvek #9, který napsal(a) Onecar
  11. 11
    Ganaj

    ganaj<zavináč>nepracujitečkacz

    Ajax je podle me dobra ve, ale nic se nema prehanet. icon_cool.gif

  12. 12
    Mdvídek

    medvidek88<zavináč>gmailtečkacom

    Celkem by mě zajímal názor nyní, po 5 letech :)

    • Na komentář odpověděl(a) Antonín Daněk v komentáři #13
  13. 13
    Antonín Daněk

    danek<zavináč>antonindanektečkacz

    Je to tu popsáno v dost striktním duchu a něco není pravda. Např. to, že se stránka změněná pomocí AJAXu nijak neliší v URL, dneska samozřejmě vím, že to jde. Také jsem článek psal v době, kdy byl JavaScript velký problém na mobilních zařízeních (doba před touch screen smartphony, kdy nejlepší prohlížeč byl Opera mini), dneska ten problém není.

    Pořád ale souhlasím s tím, že bych nutně AJAX nenutil úplně všude, především na menší webové prezentace, kde je 5 stránek obsahu, který se mění jednou za rok. Nicméně ani to nevidím jako velký problém, protože oba zmíněné problémy (indexace, JavaScript) nejsou (pokud to člověk dělá správně).

    • Tento komentář je reakcí na příspěvek #12, který napsal(a) Mdvídek