Pływająca ramka zamiast AJAX |
Wpisany przez Patryk yarpo Jar | |||
sobota, 28 listopada 2009 18:21 | |||
W ostatnim czasie AJAX bije wszelkie rekordy popularności. Tak - jest to wygodna "technologia" (w cudzysłowie, ponieważ to zbitek istniejących wcześniej technologii, a nie coś nowego). Jednak czy zawsze trzeba używać Ajaksa? Nie. Choć często jest rozwiązaniem lepszym od tego, co mam zamiar tu zaprezentować. Na swoim blogu niedawno opisałem dużo dokładniej ten pomysł - wraz z działającym kodem. Zapraszam: Ajaks w oparciu o pływającą ramkę. Pływająca ramka - iframePływająca ramka to taki "wycinek" strony, na który mnożemy wstawić inną stronę... Brzmi zawile. Może kod powie więcej: W prostokąt o rozmiarach 200x100px zostanie wczytana strona `druga_strona.htm'. I będzie żyć swoim własnym życiem. Czy możemy się do tej ramki jakoś dobrać? Tak - wykorzystując JS (dla skrócenia kodu używam innerHTML, nie znaczy to, że to jest najlepszy i najwłaściwszy sposób). Pobieranie danychAby pobrać dane z pływającej ramki można wykorzystać taki kod JS: Przykładowe zastosowanie można zobaczyć na mojej stronie (wstęp do własnego edytora typu TinyMCE itp.): yarpo.republika.pl/studia/editor. Nowy request HTTPPo prostu otwieramy w ramcę nową stronę, np. tak: Ta strona zostanie wywołana w pływającej ramce. Następnie kodem, który pokazalem chwilę wcześniej odczytujemy wszystko co się tam wyświetliło i odpowiednio interpretujemy. Ale to widać!Starczy zatem zmniejszyć rozmiar pływającej ramki do 1x1 [nie jestem pewien, czy w każdej przeglądarce 0x0 będzie akceptowane], a następnie dodać taką regułę CSS (do zewnętrznego pliku, albo do definicji stylów w sekcji head): i problem zniknął - razem z pływającą ramką. Atrybut targetPozwala nam sterować gdzie powinna się pokazać strona. Jest zakazany w XHTML-u oraz w HTML 4.01 strict. Słusznie, z resztą. Nie powinno się decydować za usera, gdzie On chce otworzyć stronę. Tu podajemy nazwę naszej ramki, dlatego skrypt php (a raczej wynik jego działania) pojawi się w pływającej ramce. Czy warto to stosować?Najczęśniej nie. Dlaczego? Ponieważ nie mamy tu takich informacji jak status requesta, nie możemy wywołać tego tak banalnie asynchrnocznie jak w przypadku Ajaksa. Czasem jednak może się okazać przydatna wiedza, ze coś takiego istnieje.
|