wtorek, 17 lipca 2012

ladowanie elementow po zaladowaniu strony

Nie wszystkie elementy strony powinny pojawic sie w tym samym momencie. Jedne sa wazniejsze, jak na przyklad menu, tresc strony itp, a inne mniej wazne - np reklamy, dodatkowe integracje. Co wiecej, dodatkowe elementy najczesciej nie powinny byc widziane przez googla. Tak wiec upieczemy 2 pieczenie przy jednym ogniu.

W firmie w ktorej pracuje uzywamy albo vanilla JS albo jQuery. jQuery nie oferuje obslugi zdarzenia onLoad. jQuery.ready() jest PRAWIE tym o co nam chodzi, ale nie do konca. Jesli rzucimy okiem na zakladke 'net' w firebugu, to dosc wyraznie widac, ze dzialania wykonywane w ramach tej metody sa zaczynane jeszcze w trakcie ladowania strony. A nie o to nam chodzi.

Tak wiec skorzystamy z vanilla JavaScript:

if (window.attachEvent) {window.attachEvent('onload', myFoo);}
else {window.addEventListener('load', myFoo, false);}


Innymi slowy pod event onLoad podpinamy wykonanie funkcji myFoo. Funkcja oczywiscie musi byc zdefiniowana (najlepiej przed zaprezentowanym powyzej kodem).

poniedziałek, 16 lipca 2012

Programista kontra ajax, czyli 'dlaczego nie dziala?'

Ostatnio ajax to co najmniej polowa, jak nie wiecej wyzwan, jakie mam w pracy. Postanowilam zebrac to wszystko jakos do kupy i napisac mini poradnik dla osob ktore musza z ajaxem zawrzec blizsza znajomosc.

Jesli napisalismy request ajaxowy, ktory powinien cos zwrocic a nic sie nie dzieje to powinnismy:
1. sprawdzic, czy przekazany adres w ogole odpowiada, np kopiujac go do przegladarki;
2. sprawdzic w firebugu czy innym srodowisku wspomagajacym prace dewelopera, czy JS nie rzuca nam jakims bledem;
3. jesli oczekujemy jsona, to trzeba sprawdzic, czy dane sa wyslane jako application/json. Kazdy typ danych ma swoj content-type, z jakim serwer powinien go zwrocic;
4. jesli request jest wysylany do strony w innej domenie lub subdomenie to jedyny sluszny typ danych to jsonp, a parametry mozna przeslac tylko getem (hint dla userow jQuery - w porzypadku cross-domain zapytan najlepiej mi dziala metoda jQuery.getJSON());
5. przegladarka cache'uje js, wiec warto dobrze odswiezac strone podczas sprawdzania rezultatow.

To tyle. Mnie zabawa za zapytania pomiedzy domenami zajela 2 dni... ale jestem bogatsza o te wiedze :)