Blog o technologiach frontend (javascript, html, css, react) oraz o tym co się zdarza w życiu informatyka.
poniedziałek, 26 listopada 2012
Zaslyszane w necie - blad chrystusowy
Nie wiem, kto jest autorem, przeczytalam dzis to na jakiejs stronie :)
Nieplanowany odstep miedzy obrazkami
No ki diabel... zaczelam sprawdzac moje style, czy aby nie mam gdzies jakiegos marginesu, paddinga czy innej ramki ustawionej, ale nic, czysto.
Roywiazanie oczywiscie jest banalnie proste. Wystarczy dodac obrazkom wlasciwosc display: block; i wszystkie tajemnicze odstepy, przestrzenie itp znikaja :D
wtorek, 13 listopada 2012
CSS3 media queries nie dzialaja?!?
No ki diabel??
Szukam i szukam, sprawdzam, czego mi zabraklo i...
Winowajca sie znalazl. meta viewport jest jednak niezbedne :)
wtorek, 6 listopada 2012
funkcje w JavaScript, part 4 - funkcje prywatne
var abc = 12;
function b () {
console.log(abc);
}
b();
}
Funkcje sa danymi, wiec mozemy je definiowac wewnatrz innych funkcji. I zachowuja sie dokladnie tak samo jak zmienne. Jesli teraz wywolamy funkcje a:
to na konsoli zostanie wypisana liczba 12. Jesli natomiast sprobujemy wywolac b:
to otrzymamy ReferenceError: b is not defined. Ten sam blad (tylko z nazwa innej zmiennej) pojawi sie, jesli sprobujemy wyswietlic wartosc zmiennej abc. Zarowno funkcja b jak i zmienna abc sa zdefiniowane wewnatrz funkcji a, wiec sa widoczne tylko w jej wnetrzu, a poza nia srodowisko ich nie zna.
środa, 31 października 2012
funkcje w JavaScript, part 3 - samowywolujace sie funkcje
Jak wyglada samowywolujaca sie funkcja? Jest to anonimowa funkcja otoczona nawiasami okraglymi, po ktorych jest jeszcze jedna para nawiasow okraglych i srednik.
function() {
// cialo funkcji
}
)();
Jak to dziala? Otoz sama definicja funkcji anonimowej nie wnosi nic. Kod sie nie wykona automagicznie. Pierwsza para nawiasow opakowuje funkcje anonimowa, jako kod wykonywalny, a druga sluzy do przekazywania parametrow. Dosc czesto mozna spotkac sie z nastepujacym zapisem:
function ($) {
// cialo funkcji
}
)(jQuery);
Jest to jeden z wielu sposobow na unikniecie konfliktu w przestrzeni nazw, gdy uzywa sie wiecej niz jednej biblioteki pozwalajacej na uzywanie znaku $ jako nazwy zmiennej. W pokazanym przykladzie sytuacja jest bardzo czysta. Wewnatrz funkcji znak dolara istnieje tylko jako obiekt jQuery.
Powyzszy zapis ma jedna zasadnicza wade. Ten kod mozna wykonac tylko raz, poniewaz nie ma nazwy. Uzycie funkcji anonimowej eliminuje zasmiecanie globalnej przestrzeni nazw, ale rownoczesnie uniemozliwia powtorne wykorzystanie kodu. Do czego wiec uzywa sie samowolajacych sie funkcji? Ogolnie do ustawiania srodowiska, jest to operacja wykonywana zazwyczaj raz, przy inicjalizacji.
poniedziałek, 29 października 2012
funkcje w JavaScript, part 2 - funkcje anonimowe
jest poprawny, tak samo zapis:
tez jest poprawny. Ale idac za ciosem, zapis:
tez jest poprawny, choc nic nie wnosi. Ot sama wartosc. W takim badz razie zapis:
tez jest poprawny, choc w takiej postaci tez nic nie wnosi. Powyzsza definicja funkcji bez podania nazwy jest okreslana funkcja anonimowa (anonymous function).
Do czego mozna uzyc takiego tworu? Najczesciej przekazuje sie jako parametr do innej funkcji (funkcje sa danymi, wiec mozna je przekazywac jako parametry), tzw anonymous callback function, lub wywoluje w specyficzny sposob.
Anonymous callback function:
var a = 12;
var b = function(va, vb) {
console.log("va = " + va);
console.log("vb() returns " + vb());
}
b(a, function(){ return a + 2;});
}
fa();
Kod stosunkowo prosty. Ot mamy funkcje fa. W srodku definiujemy zmienna a oraz funkcje prywatna b (niewidoczna z zewnatrz, ale o tym w innym poscie). Funkcja b przyjmuje 2 parametry, drugi jest funkcja. Oba parametry wyswietla na konsoli. Nastepnie wolamy funkcje b przekazujac jako pierwszy parametr zmienna a, a jako drugi funkcje anonimowa w ktorej modyfikujemy a dodajac do niej 2. Na koncu wywolujemy fa.
I tu pojawia sie pytanie, po co przekazywac funkcje anonimowa jako parametr do innej funkcji? Przeciez mozna zapisac (a + 2) i przekazac jako zwykla liczbe. To oczywiscie byl prosty przyklad. Funkcja anonimowa dziala, jak kazda inna, ma swoj wlasny scope, ale i widzi zmienne ze srodowiska w ktorym sie znajduje. Daje nam to duze mozliwosci uzywania zmiennych dostepnych i manipulowania nimi bez zasmiecania przestrzeni nazw kolejna nazwa funkcji uzyta w jednym tylko miejscu. Opakowuje ladnie kod, dzieki czemu wprowadzanie zmian jest latwiejsze.
Wyobrazmy sobie, ze mamy tablice po ktorej sie iterujemy i kazdy element modyfikujemy. Iteracja po tablicach czy obiektach jest zasobozerna. Im wieksza tablica, tym wiekszy czas wykonania iteracji i tym wiecej zasobow jest wykorzystanych. Optymalizacja w takich wypadkach polega na tym, aby ograniczyc sie do jednej iteracji i zmniejszyc czas wykonania operacji na kazdym elemencie. Najszybciej wykonuje sie kod napisany inline, ale kazdy programista z choc minimalnym doswiadczeniem wie, jak trudno jest utrzymac kod napisany inline. Dlatego wykorzystuje sie funkcje anonimowe, ktore daja swoj narzut na wykonanie kodu, ale go rownoczesnie porzadkuja i ulatwiaja wprowadzanie zmian i utrzymanie.
Jak widac, powodow uzywania funkcji anonimowych jako parametrow jest wiele, najczesciej zwiazane sa one z optymalizacja kodu i/lub jego czytelnoscia.
A tutaj przykład użycia samowywołujacej się funkcji anonimowej
piątek, 26 października 2012
funkcje w JavaScript, part 1 - sposoby definiowania
// cialo funkcji
return;
}
Drugi wymaga krotkiego wprowadzenia. W JavaScript funkcje sa nie tylko funkcjami, ale rowniez danymi, w zwiazku z powyzszym mozna je zdefiniowac, jak zmienna:
// cialo funkcji
return;
};
W obu przypadkach wywoluje sie je tak samo:
xyz();
Tak wiec funcje w JavaScript sa danymi, ale specyficznymi i posiadaja dwie bardzo wazne wlasciwosci: zawieraja kod i sa wykonywalne.
Jesli uzyjemy operatora typeof na nazwach obu funkcji, za kazdym razem dostaniemy wynik "function".
console.log("xyz jest typu " + typeof(xyz));
Tak wiec mimo roznicy w sposobie definiowania jest to wciaz funkcja.
wtorek, 23 października 2012
zasieg zmiennych (scope) w JavaScript
Zalozmy ze mamy kod:
function f() {
console.log('1. ' + a);
var a = 2;
console.log('2. ' + a);
}
f();
Zasieg zmiennych w JS jest ograniczony nie do nawiasow klamrowych, a do funkcji (od ES6 tylko dla słowa kluczowego var). Jesli zmienna jest w globalnej przestrzeni nazw (bez slowka var) to jest osiagalna praktycznie z dowolnego miejsca. Slowko var ogranicza zasieg, np do danego pliku czy funkcji.
Co bedzie wynikiem dzialania takiego kodu? Otoz zmienne sa widoczne w srodowiskach zawartych, ale nie na zewnatrz. Wiec jesli na zewnatrz funkcji mamy zdefiniowana zmienna a, a wewnatrz funkcji tworzymy ja jeszcze raz (slowko var), to JavaScript bedzie widzialo ta zmienna wewnatrz funkcji, jako zmienna o zasiegu tylko na te funkcje. Zaskutkuje to tym, ze pierwszy console.log wypisze nam undefined. Dlaczego? Bo wewnatrz funkcji ta zmienna JESZCZE nie ma wartości (interpreter już wie, że będzie stworzona, ale jeszce w tej linii kodu nie ma wartości; stąd dobra praktyka tworzyć WSZYSTKIE zmienne na początku funkcji/bloku kodu, żeby uniknąć takich sytuacji), wiec by default ma przypisana wartosc undefined. Drugi console.log wypisze juz, zgodnie z oczekiwaniami wartosc 2.
Zmodyfikujmy troche nasz kod:
function f() {
console.log('1. ' + a);
a = 2;
console.log('2. ' + a);
}
f();
Mala roznica. Wenatrz funkcji usunelam slowo var przed definicja zmiennej lokalnej a. Co to zmienia z punktu widzenia naszego programu? Wszystko. Przede wszytkim JavaScript sprawdzi, czy w zasiegu dostepnym z wnetrza funkcji nie ma juz zmiennej a. Jesli jest (jak w naszym przypadku) to zmieni jej wartosc.
Nasz program wypisze dwa razy wartosc zmiennej a widoczna wewnatrz funkcji. Za pierwszym razem bedzie to 1, a za drugim 2 (wartosc zmieniona juz wewnatrz funkcji)
To teraz tylko sprawdzenie, jak to wyglada na zewnatrz funkcji:
function f() {
console.log('1. ' + a);
a = 2;
console.log('2. ' + a);
}
console.log('3. ' + a);
f();
console.log('4. ' + a);
Zgodnie z oczekiwaniami zmienna istnieje w kazdym przypadku i zmiana jej wartosci wewnatrz funkcji skutkuje zmiana rowniez poza funkcja, bo operujemy na zmiennej o zakresie szerszym niz zakres tej funkcji.
niedziela, 14 października 2012
CSS3 Media Queries, IE 8 i starsze oraz fixy w js
Na stronie Can I use? mozna sprawdzic dostepnosc roznych elementow CSS3 i HTML5 w roznych przegladarkach (rowniez mobilnych). Jak widac, CSS3 Media Queries nie sa obslugiwane przez IE8 i starsze (co nas w sumie nie dziwi...). To co ma zrobic frontendowiec chcacy zrobic strone zgodna ze wszystkimi zasadami i ladnie wyswietalajaca sie w roznych rozdzielczosciach?
Jak zwykle w takich przypadkach siegamy po pomoc JS. Polecam skrypt respond.js. Wystarczy sciagnac wersje mini, wrzucic do sekcji head i...
No wlasnie i wszystko zalezy od tego, czy nasza responsywna stronke piszemy lokalnie czy na serwerze. Bo jesli lokalnie, to nasze zabiegi majace na celu nauczenie IE 8 i starszych jak rozumiec CSS3 Media Queries nie odniosa zadnego skutku. Zeby cokolwiek zadzialalo, pliki musza byc serwowane z serwera.
filter: progid:DXImageTransform.Microsoft.gradient nie dziala w IE7
Dodanie wysokosci w kontenerze lub overflow:auto;.
czwartek, 11 października 2012
Puste miejsca miedzy <LI> w IE 7/8
Czyli zamiast:
<LI>text</LI>
<LI>text</LI>
zrobmy:
Juz slysze te glosy niezadowolenia, ze wtedy dluga linia, ze nieczytelne, trudne w utrzymaniu... Zgadzam sie, dlatego w ramach ulepszania kodu wystarczy zrobic cos takiego:
text</LI><LI>
text</LI>
Gra i buczy.
czwartek, 13 września 2012
IE7 i praca na stringach
for (var i = 0; i < max; i++){
var letter = txt[i];
}
Sprawdzam w Operze, Chrome, FF, ktos tam przetestowal pod IE8. Bangla.
Nastepnego dnia mail od uzyszkodnika, ze zamiast tekstu widzi "undefinedundefinedundefinedundefinedundefinedundefined". O zesz ty... User korzysta z jakze nowoczesnej przegladarki IE7. Postawilam Viste na virtualboxie i testuje. Fakt... nie bangla jak trzeba.
Internet Twoim przyjacielem. IE7 nie umie poruszac sie po stringu przy uzyciu indexow, najpierw trzeba mu string zamienic na tablice...
No coz, czlowiek uczy sie cale zycie.
wtorek, 11 września 2012
rekruterska akwizycja
poniedziałek, 10 września 2012
Goraco...
Kilka miesiecy temu przeprowadzilismy sie tu i... w upalne dni, nie dalo sie wytrzymac. Najpierw wschodnia strona biura nie dzialala, pozniej moja, czyli zachodnia. Masakra. Kilka dni temu na zewnatrz bylo kolo 10 stopni, padalo i wial chlodny wiatr. Sciany wychlodzily sie momentalnie i ciagnelo od nich zimnem... Siedze obok okna i kaloryfera. Mam nadzieje, ze zima beda grzali na pelen sicher, bo inaczej ja tu uswirkne z zimna.
Poki jest goraco radzimy sobie za pomoca wentylatorow, ale co tu sie bedzie dzialo, jak temperatura spadnie ponizej 0 to nawet myslec nie chce :P
czwartek, 30 sierpnia 2012
Impreza firmowa
Calosc startowala o 19 w jakims tajemniczym miejscu (dopiero wczoraj tuz przed wyjazdem dostalismy na maila mapki z trasa dojazdu i powrotu). Od 17 w firmie zapanowalo kompletne rozluznienie. Ludzie snuli sie grupkami i zywo rozmawiali, komputery powoli byly wylaczane a ostatnie spotkania konczone. Wreszcie o 18 zapakowalismy sie w 4 autka i w droge.
Dojazd (na kompletne peryferia Berlina, gdzies na polnocy) zajal nam kolo 40 minut. Dojechalismy i... och... Wszystkim wyrwalo sie zduszone westchnienie. Naszym oczom ukazal sie tor wodny, z wyciagiem i linkami (cos jak kolejka orczykowa dla narciarzy). Narty wodne.
Osoby zainteresowane (wiekszosc) wskoczyla w stroje kapielowe (jak sie dowiedzielismy o tych strojach to snulismy domysly, miedzy innymi pojawila sie sugestia, ze to bedzie nurkowanie z rekinami :D), wypozyczyla (w zastaw za imienny dokument, ja dalam karte ubezpieczeniowa, bo ambitnie zadnego id ze soba nie wzielam) piankowy kombinezon, kask i kamizelke, pobrala sprzet (narty) i zaczelismy nauke.
Najpierw Panowie zafundowali nam krotkie szkolenie, jak startowac, co kiedy robic i takie tam. Wiedza teoretyczna to jedno, a zastosowanie jej w praktyce to cos zupelnie innego. Ustawilismy sie w kolejke i wystartowalismy, po kolei w odpowiednio duzych odstepach, zeby w razie wywrotki jeden drugiemu krzywdy nie zrobil.
Przyznam sie bez bicia, ze moje umiejetnosci narciarskie jakies tam sa, ale tutaj, to pierwsze szarpiecie na starcie powodowalo, ze lezalam jak dluga w wodzie. Ale mili Panowie z obslugi i na taka sierote, jak ja, byli przygotowani. Dostalam duza szeroka deske, wylozona miekka guma, na ktorej sie klekalo. Bingo :D. Z tym juz sobie poradzilam i wykonywalam 3/4 toru... niestety na ostatnich lukach szarpiecia, gdy linka przeskakiwala, byly tak silne dla mnie, ze nie dawalam rady.
Ale co tam, po wywrotce, zbieralo sie sprzet i plynelo do brzegu. Tam w niewielkich odstepach lezaly maty, z progami o ktore mozna bylo zaprzec stopy i wdrapac sie na brzeg. Brzeg wylozony byl kamieniami, wiec trzeba bylo korzystac z mat, a maty, mimo progow sliskie byly jak jasna cholera :D, wiec kupa smiechu byla nawet z samego wypelzania z wody.
Od godziny 19 osrodek byl zarezerwowany tylko dla nas. Dwaj Panowie z obslugi toru byli tylko dla nas, smiali sie i zartowali razem z nami. Obaj mowili plynnie po angielsku, co stanowilo dla naszej mieszanej zalogi zasadniczy plus. Tor byl czynny do 21.
Od 19 mielismy dostepny bar z napojami (poza twardymi alkoholami, schwepsem i redbullem), o 21, jak zamkneli tor, otwarto kuchnie, czyli olbrzymi buffet z grillowanym miesem, warzywami, salatkami, pieczonymi ziemniakami, owocami i deserem panna cota. Jedzenie bylo przepyszne, a wczesniejszy wysilek skutecznie podbudowal apetyty. Jednak mimo wszelkich wysilkow nie udalo nam sie zjesc wszystkiego.
Impreza byla swietna, bawilismy sie przednio (nawet ci, ktorzy z roznych powodow zostali na brzegu), smialismy sie non stop. Ludzie, mimo iz spedzaja ze soba 8-9 godzin dziennie chetnie rozmawiali na rozne tematy, rowniez zahaczajace troche o prace. Firma wykazala sie pelnym zrozumieniem i bez oporow dala cale lub pol dnia wolnego na dzis dla wszystkich chetnych :)
To byla najlepsza integracja, jaka widzialam. Zadnych wymuszonych zabaw, ot zespol (zaproszenie dostaly nawet osoby, ktore dopiero zaczna z nami prace (maja juz podpisana umowe) jak i te, ktore odeszly od nas na przestrzeni ostatnich miesiecy) bawil sie, jadl i pil razem. Kazdemu kibicowalismy i nagradzalismy brawami i okrzykami zarowno udane starty jak i te zakonczone kapiela :)
Bylo genialnie, juz nie moge sie doczekac imprezy za rok :D
niedziela, 26 sierpnia 2012
jak zlikwidowac podwojne ramki w miejscu stykania sie dwoch elementow?
środa, 22 sierpnia 2012
ready... steady... go!!
Maybe not in a galaxy, but it was long time ago, when I've played Deathmaze first time. What it is? Nice RPG for long winter evenings made by Encore 33 years ago. Here you can read something more about this.
So... After 2 years of thinking about this I just started to build browser game based on Deathmaze. So wish me luck and check my progress here on my blog :)
poniedziałek, 20 sierpnia 2012
Nadgorliwy rekruter
Kilka dni temu nawiazal ze mna kontakt niejaki James z firmy rekrutacyjnej. Zafascynowany moimi osiagnieciami (w sumie to nie do konca rozumiem w czym rzecz, 12 lat doswiadczenia brzmi dumnie, ale bez przesady) zaczal sie dopytywac czego szukam. Pierwszy zonk zaliczyl na samym poczatku rozmowy, albowiem stwierdzilam, ze nie szukam pracy. Co prawda mam profil na linkedIn i monsterze, ale pracy nie szukam, bo obecna mnie satysfakcjonuje.
Mam wrazenie, ze to co powiedzialam nie miescilo sie mu sie w glowie, ale nie dyskutowal ze mna, tym bardziej, ze dodalam, ze jestem otwarta na nowe mozliwosci, o ile beda ciekawe i rozwijajace, zwlaszcza w zakresie Agile a dokladniej Scruma.
Wyslalam mu swoje CV, probke kodu i... nastepnego dnia (czwartek) zadzwonil, ze wyslal moje CV do jakiejs firmy i ze chca sie ze mna spotkac, najlepiej teraz zaraz. Powiedzialam, ze jak teraz zaraz to zeby wyslal mi opis stanowiska i nazwe firmy i w piatek po 12 moge sie przejsc. Przemilczalam fakt, ze bardzo mi sie nie spodobalo, ze wyslal moje CV bez uprzedniej konsultacji. W sumie w obecnej firmie pracuje tylko dlatego, ze Andy zrobil dokladnie to samo.
Kilka godzin pozniej James zadzwonil ponownie. Druga firma chce ze mna gadac. Odmowilam drugiego interview w piatek i ustawilismy rozmowe przez skype w poniedzialek. Dopiero w piatek rano mialam czas zeby wreszcie dokladnie przyjrzec sie wymaganiom na stanowiska, na ktore wyslal moje CV. Szczerze mowiac szlag mnie trafil. Napisalam mu, ze nie spelniam podstawowych wymagan (bardzo dobra znajomosc Zend Framework i TDD) i ze uwazam, ze powinnismy odwolac obie rozmowy. Chwile pozniej zadzwonil. Probowal mnie przekonywac. Wiec wprost powiedzialam, ze te oferty nie sa niczym specjalnym. Ot kolejne oferty dla Senior PHP Developera. Nie ma w nich niczego, co mogloby mnie skusic, zebym myslala o zmianie pracy.
Na Jamesa podzialalo to jak plachta na byka. Argumentowal, ze o tym, co firma moze mi zaoferowac, dowiem sie na rozmowie. Na moje pytanie po co tam mam isc skoro w opisie stanowiska nie bylo niczego, co mogloby mnie zainteresowac i dodatkowo nie spelniam podstawowych wymagan stwierdzil, ze przeciez opis stanowiska jest ogolnymi wytycznymi i ze jesli firma po obejrzeniu CV chce ze mna rozmawiac to powinnam isc.
Rozmawialismy chyba ze 20 minut. Do Jamesa nie docieral fakt, ze Zend Framework jest podstawowym srodowiskiem, w jakim firma pracuje, wiec nie przyjma mnie na stanowisko senioralne, co najwyzej zanotuja co umiem i wrzuca w baze danych. A nie o to mi chodzi i nie chce marnowac swojego czasu i dwoch CTO. James byl jednak nieprzejednany. Uparl sie.
Koniec koncow wprost mu powiedzialam, ze to nie sa stanowiska, ktorych szukam. Ze czuje, ze do nich nie pasuje, a jako, ze mam prace, to nie chce sie zmuszac. James sie chyba wkurzyl, bo mi wygarnal, ze go rozczarowalam. Na moja slaba obrone, ze powinien mnie najpierw spytac zanim gdziekolwiek wysle moje CV dowiedzialam sie, ze nie to jest tematem rozmowy. Dodatkowo rzucil, ze w ten sposob postepujac nigdy nie znajde pracy (przeciez ja nie szukam pracy...) a on nie chce miec z tym nic wspolnego i odwoluje moje spotkania.
Tak wiec piatek mialam wolny, dzisiejszy wieczor tez. James sie do mnie nie odzywa, a ja realizuje w pracy kolejny projekt.
Tylko skad sie biora tacy nawiedzeni rekruterzy?
piątek, 3 sierpnia 2012
Opera i document.write() w funkcji pod onclick
Po kliknieciu w link, funkcja powinna zrobic swoje, zwrocic true i user powinien przejsc do wskazanej w atrybucie href strony. I owszem, tak sie dzialo wszedzie, ale nie w Operze. Opera, przy linkach z ta konkretna funkcja w onclick, stawala deba i odmawiala wspolpracy pokazujac pusta strone.
Juz jakis czas temu odkrylam, ze to zachowanie Opery bylo forma protestu na document.write(), ktory w opisywanej funkcji znajdowal sie tuz przez return true; Ewidentnie true nie bylo tym co ta funkcja wedlug Opery zwracala. Zakomentowanie document.write() przywracalo Operze zdolnosc dzialania.
Dzis (w sumie piatek, bug fixing day) wzielam ten task na tapete. Kolega z biurka obok zasugerowal, zeby document.write zamienic na ajaxa (w document.write znajdowal sie img, wiec zeby osiagnac ten sam efekt trackingowy, mozna by adres obrazka wywolac ajaxem). Doszlam do wniosku, ze jak nie bedzie innego wyjscia, to siegne po ajaxa, ale poki co poszukamy czegos prostszego.
Zasiegnelam opinii internetu i skorzystalam z sugestii zamieszczonej na jednej z grup. Zamienilam document write na operacje na DOM. Poprostu dodalam ten obrazek do kontenera body. Opera pochwalila mnie za ten pomysl prawidlowym dzialaniem, a ja wyslalam task do testow :)
Zabawy z kodem napisanym kilka lat temu i to niekoniecznie przez osobe, ktora ma o tym jakies pojecie to dla mnie nieustajace zrodlo nowej wiedzy na temat przegladarek, roznic miedzy nimi oraz tego, jak kodu nie powinno sie pisac.
wtorek, 17 lipca 2012
ladowanie elementow po zaladowaniu strony
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:
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?'
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 :)