Autor Zpráva
Cup
Profil
Ahoj chtěl bych se zeptat jestli nevíte o nějakem jednoduchém tutoriálu kde pomocí události v js přes ajax pouze spustím php soubor ...

jde mi o to že kliknu na odkaz v divu, událost div pomocí js skryje a pak se zavolá pomocí ajaxu php soubor a ten mi změní hodnotu session ... žádné výsledky, nic vracet nebude ... jen kliknout a spustit ...

Nevíte o nějakém příkladu na webu? popsaném? :) díky
Cup
Profil
kdyby to někoho zajímalo tak

      var XMLHttpRequestObjekt = false; 

      if (window.XMLHttpRequest) {
        XMLHttpRequestObjekt = new XMLHttpRequest();
        XMLHttpRequestObjekt.overrideMimeType("text/xml");
      } else if (window.ActiveXObject) {
        XMLHttpRequestObjekt = new ActiveXObject("Microsoft.XMLHTTP");
      }


a na událost zavolám funkci
function skrytAktualitu()
      {
      
      if(XMLHttpRequestObjekt) {

          XMLHttpRequestObjekt.open("GET", "/skrytAktualitu.php"); 

          XMLHttpRequestObjekt.onreadystatechange = function() 
          { 
            if (XMLHttpRequestObjekt.readyState == 4 && 
              XMLHttpRequestObjekt.status == 200) { 
             // kdyz to probehne v poho tak skryj aktualitu 
             document.getElementById("skrytAktualitu").style.display = "none";    
            } 
          } 

          XMLHttpRequestObjekt.send(null); 
        }
      }


zdá se že to funguje
Chamurappi
Profil
Reaguji na Cupa:
Ve všech prohlížečích?
Cup
Profil
je to z knihy tak snad ano. Vidíš tam snad něco špatného?

// edit
to je klidně možné že tam je něco špatně. je to předělaný příklad který vracel xml ... no pokud tam někdo něco vidíte tak díky když to sem napíšete, v chrome to jede ... jinde jsem to zatím nezkoušel
Chamurappi
Profil
Reaguji na Cupa:
v chrome to jede ... jinde jsem to zatím nezkoušel
Tak si to vyzkoušej všude, když už píšeš, že to funguje.

Mimochodem, na pingnutí vůbec nepotřebuješ AJAX, stačí dva řádky:
var temp = new Image();
temp.src = "/skrytAktualitu.php";
Cup
Profil
Chamurappi:
díky za radu :) to sem nevěděl :), bude se hodit.
Witiko
Profil
Osobně mám s ajaxem spíše špatné zkušenosti co se týče všeobecné kompatibility, zabezpečení (čti ořezání funkčnosti) a zamezování cross-domain komunikace. Jistotou a v mnoha případech ještě jediným řešením je dynamické nahrání php scriptu do dokumentu, který provede danou akci a vygeneruje odpověď jako javascriptový kód, který si daná aplikace zpracuje. Osobně jsem tuto metodu vždy používal, nějakou dobu jsem poté pracoval s ajaxem, ale postupem času jsem zjistil, že nenabízí nic, co by nešlo touto metodou reprodukovat, jen je mnohem víc ohraničený a omezený. Například Google tuto metodu používá ve všech svých webových aplikacích a funny fact: Říkají jí ajax, ačkoliv technologie ajaxu není vůbec použíta. (http://clanky.gug.cz/2008/04/google-ajax-api.html)

Příklad:

helloworld.php:
<?php

echo "result = \"Hello, " . $name . "!\";"

?>


helloworld.js:
var result;
function nacti(adresa, callback) {
...
}

nacti("http://domena/helloworld.php?name=Cup",function(){alert(result);})


Výsledek: Script se načte a objeví se alert Hello, Cup!. Na rozdíl od ajaxu funguje za všech podmínek.
Samotná funkce nacti je zase trochu něco jiného, moje aktuální řešení:

http://diskuse.jakpsatweb.cz/?action=vthread&forum=8&topic=94682&page=-1

Jediné minus je, že spousta prohlížečů catchuje shodné js soubory a při načítání souboru se stejnou adresou vícekrát se již prohlížeč nepřipojuje k serveru, ale to je jednoduše vyřešitelné přidáním do adresy elementu, jenž nikdy není stejný, můj favorit je "#" + new Date().getTime(). To se dá zabudovat rovnou do funkce nacti, já to v mé knihovně dscript nemám, protože to není vždy potřeba -> např. tahání dat ze slovníku, je zcela jedno jestli jde o catched, nebo čerstou informaci.

Chamurappi: Zajímavé řešení. Problém s opětovným nenačítáním zůstává, nicméně není třeba kontrolovat načtený element, pěkné řešení, pokud člověk neočekává od php scriptu žádná data.
_es
Profil
Witiko:
Chamurappi: Zajímavé řešení. Problém s opětovným nenačítáním zůstává
To sa dá vyriešiť:
var temp = new Image;
temp.src = "/skrytAktualitu.php?" + (new Date).getTime();
Zaujímalo by ma ešte, či je isté, že bude v každom prehliadači fungovať aj tento jednoriadkový kód:
(new Image).src = "/skrytAktualitu.php?" + (new Date).getTime();
či niektorý prehliadač ten objekt nezmaže ešte pred vyžiadaním obrázka.

můj favorit je "#" + new Date().getTime()
Tam nie je zaručené, že to nebude z cache pamäte.
Chamurappi
Profil
Reaguji na _es:
Tam nie je zaručené, že to nebude z cache pamäte
Dokonce bych na první pohled řekl, že je jisté, že to z keše bude, protože prohlížeči přijde zbytečné ptát se serveru na tu samou adresu.

Zaujímalo by ma ešte, či je isté, že bude v každom prehliadači fungovať aj tento jednoriadkový kód
To by mě také zajímalo, instinktivně mu moc nevěřím.


Reaguji na Cupa:
Abych dokončil, co jsem nakousnul — na tebou uvedeném zdrojovém kódu (v příspěvku [#2]) selžou Explorerové 7 a 8, jelikož předpokládáš, že prohlížeč podporující window.XMLHttpRequest podporuje na tomto objektu i metodu overrideMimeType, což u Explorerů neplatí.
Mimochodem, zajímalo by mě, co se snažíš vytvořit za dílo, když ho testuješ pouze v jednom z nejméně zastoupených prohlížečů.
Kcko
Profil
1 radek v Jquery ...
Chamurappi
Profil
Reaguji na Kcka:
Bez jQuery jsou to dva a efektivněji napsané.
Witiko
Profil
Kcko: JQuery jsem skusil a nenabízí nic, co bych si nedokázal napsat sám. Možná si hážu klacky pod nohy, ale nikdy mi k srdi nepřirostl. Raději si kód napíšu přímo v javascriptu.
Kcko
Profil
Witiko:
Kcko: JQuery jsem skusil a nenabízí nic, co bych si nedokázal napsat sám. Možná si hážu klacky pod nohy, ale nikdy mi k srdi nepřirostl. Raději si kód napíšu přímo v javascriptu.

Aha, a muzes mi prozradit jak snadno obarvis lichy a sudy radek tabulky. Nebo jak snadno obarvis sude a liche sloupce tabulky?
V jQuery je 1 radek. Nemluvim ted ani o praci s ajaxem atd.

Ten kdo tvrdi, ze jQuery nepotrebuje a ze si sam pise vsechno v JS tak ma asi hodne casu a hodne nervu ...
Chamurappi
Profil
Reaguji na Kcka:
muzes mi prozradit jak snadno obarvis lichy a sudy radek tabulky
for(var i = 0, tr; tr = tabulka.rows[i]; i++) tr.className += i % 2 ? " lichý" : " sudý";

Nebo jak snadno obarvis sude a liche sloupce tabulky?
Analogicky. Použil bych <col>, počet sloupců zpravidla znám a pořadí <td> v <tr> nemusí vždy odpovídat sloupci.
Většinou není důvod obarvovat tabulku na straně klienta.

V jQuery je 1 radek.
+ hromada kB mimo, která řeší podobné nesmysly, jako je volání skriptu umístěného v hlavičce při načtení patičky.

Nemluvim ted ani o praci s ajaxem atd.
Zrovna u AJAXu jsou rozdíly mezi standardním zápisem a tím frameworkovým docela malé.

ze jQuery nepotrebuje a ze si sam pise vsechno v JS
I jQuery je JS. Začátečníci v tom mívají bordel, když se z frameworku dělá konkurenční jazyk. Je to pořád obyčejný JavaScript, s jednou všehoschopnou funkcí, která umí rychle a nekoncepčně obstarat kdejakou volovinu.
Kcko
Profil
Chamurappi:
Ano, cekal jsem, ze napises :-)

Ty priklady co jsem zamerne uvedl jsou jednoduche, konkretne bod 2 by v klasickem JS byl mnohem delsi nez v jQuery viz

				  $("tr td:even").addClass("td-even");
				  $("tr td:nth-child(last)").addClass("br-none");
				  $("tr th:last").addClass("br-none");



To, ze to vetsinou nepotrebujes nic neznamena, u naseho klienta nyni takovy pozadavek vznikl. Napisu to na 3 radky a mam klid.
Nehlede na to, ze vetsinou potrebujes mnohem komplexnejsi selectory a tady se jQuery ukaze jako mocny pan.

S tim Ajaxem, jsem to myslel tak, ze veskere stavy maji ozkousene, clovek se nemusi drbat s requesty, proste si zavola jednu funkci, nastavi si error, success, pripradne beforeload a je hotovo.

jQuery pouzivaji tisice lidi, protoze nemusi do JS tolik videt a zjednodusse jim praci, zabyvaji se jen tim podstatnym (to neni tvuj pripad, proto to tak branis)

Hromada kB? To v dnesnim svete rychleho netu neobstoji, jeden-dva blbe zkomprimovane obrazky maji vetsi velikost nez jedna nalinkovana jquery knihovna, ktera se navic pote zakesuje. Nevidim v tom problem.

Nechci z toho delat nejaky flame, kazdy at si pise kod jak chce, ale at tady zaprisahli odpurci jQuery netvrdi, ze je k nicemu, zbytecny a ze vsechno jde napsat pomoci javascriptu. Asi ano, ale za jakou cenu ( ladeni pro prohlizece, cas psani ... viz vyse atd)
Chamurappi
Profil
Reaguji na Kcka:
To, ze to vetsinou nepotrebujes nic neznamena
Ale znamená — to, co není často potřeba, nepotřebuji mít jednoduše dostupné.

bod 2 by v klasickem JS byl mnohem delsi nez v jQuery
Byl by o něco delší, ale to mi v dnešním světě rychlého netu nevadí. Vykonával by se rychleji.

$("tr td:even")
Element <th> nepočítáš jako buňku? Jak ošetříš spojené buňky? To by právě řešil <col> (s jQuery či bez).
Předpokládám, že <th> a spojené buňky neřešíš, protože to většinou není potřeba, hm?

ze vetsinou potrebujes mnohem komplexnejsi selectory a tady se jQuery ukaze jako mocny pan
Pokud si můžu navrhnout HTML strukturu, navrhnu si ji optimálně (nehledě na to, zda používám jQuery) a pak nepotřebuji komplexnější selektory.

S tim Ajaxem, jsem to myslel tak, ze veskere stavy maji ozkousene
Tam není moc stavů, které stojí za pozornost. Většinou chci jen chytit odpověď a někam ji strčit, if(xhr.readyState != 4) return; a nazdar, zbytek neřeším. (Většinou. Pokud ho řešit chci, jsou to dva ify navíc.)

at tady zaprisahli odpurci jQuery netvrdi, ze je k nicemu, zbytecny a ze vsechno jde napsat pomoci javascriptu
I jQuery je JS, z čehož plyne fakt, že všechno jde napsat pomocí JavaScriptu. To, jestli je zbytečné, záleží samozřejmě na situaci. Je to jen framework, ne politická strana, sekta, nebo fotbalový tým…

za jakou cenu ( ladeni pro prohlizece, cas psani ... viz vyse atd)
Nekompatibility prohlížečů musím ladit i s jQuery. Na ty, které framework ošetřuje, buď nenarážím, nebo je ošetřuji automaticky, zpravidla stačí jeden řádek na každou. Čas psaní je většinou zanedbatelný ve srovnání se zbytkem tvůrčího procesu.

Jsme kapku mimo téma, ale to nevadí, kdyžtak nás vyčlením.
Cup
Profil
[#9] Chamurappi:

No ... ještě že je to hodně nepodstatná věc. Udělám to jinak. Dlouho jsem tu nebyl a koukám že jste to tady trochu rozjeli.

Díky

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: