Newsletter

Grupa MagazynyInternetowe

Online: 990

Wyszukiwarka

AJAX, jQuery

AJAX Kurs od podstaw - jQuery

Menu c.d., Wyszukiwarka

Ajaksowe menu działające po wyłączeniu JavaScriptu

Witryna z menu, które nie przeładowuje strony, wymaga przygotowania każdej podstrony w dwóch wersjach: pełnej i okrojonej. Strona w wersji okrojonej zawiera przedrostek fragment-. Jeśli na przykład witryna zawiera dwie opcje menu, które mają ładować pliki abba.html oraz ac_dc.html, to należy przygotować cztery pliki:

[+]
 
 
Pobierz
1. abba.html
2. fragment-abba.html
3. ac_dc.html
4. fragment-ac_dc.html

W menu witryny, w atrybutach href stosujemy nazwy pełnych stron (tj. bez przedrostka fragment-):. Dzięki temu witryna będzie działała po wyłączeniu JavaScriptu:

[+]
 
HTML
Pobierz
1. <ol>
2.    <li><a href="abba.html">ABBA</a></li>
3.    <li><a href="a_dc.html">AC DC</a></li>
4.    ...
5. </ol>
6. <div id="content">

W powyższym kodzie ujawnia się cały urok rozwiązania stosującego jQuery. Jest to bowiem zwykłe menu, jakie byśmy przygotowali wykonując statyczne pliki HTML.

Modyfikację hiperłączy menu w takie, które nie przeładowują strony zapewnia kod zawarty w pliku menu.js (plik ten należy oczywiście dołączyć do każdej pełnej podstrony):

[+]
 
JavaScript
Pobierz
1. $(document).ready(function(){
2.    $('a').click(function(){
3.    $('#content').load(
4.       'fragment-' + $(this).attr('href')
5.    );
6.    return false;
7.    });
8. });

Kolejno:

  • wybieramy wszystkie hiperłącza $('a'),
  • ustalamy obsługę zdarzenia onclick,
  • w obsłudze zdarzenia onclick do elementu posiadającego identyfikator #content ładujemy zewnętrzny plik,
  • adres url pobieranego pliku zewnętrznego powstaje z adresu odczytanego z atrybutu href klikniętego hiperłącza this przez dodanie prefiksu fragment-,
  • kliknięcie hiperłącza nie może powodować przeładowania strony (return false).

Wyszukiwarka

Wyszukiwarka ajaksowa, której użycie nie przeładowuje strony wykorzystuje formularz oraz element #wyniki:

[+]
 
HTML
Pobierz
1. <form action="index.php" method="get">
2.    <input id="sz" name="szukaj" />
3.    <input type="submit" value="szukaj" />
4. </form>
5. <div id="wyniki"></div>

Działanie wyszukiwarki definiuje następujący kod JavaScript:

[+]
 
JavaScript
Pobierz
1. $(document).ready(function(){
2.    $('#wyniki').hide();
3.    $('form').submit(function(){
4.       $('#wyniki').load('server.php?co=' + $('#sz').attr('value'));
5.       $('#wyniki').show();
6.       return false;
7.    });
8. });

Kolejno:

  • zaraz po załadowaniu dokumentu ukrywamy element #wyniki (metoda hide()),
  • ustalamy obsługę zdarzenia onsubmit elementu form,
  • obsługa zdarzenia polega na załadowaniu zewnętrznego dokumentu do elementu #wyniki (metoda load()) i pokazaniu elementu #wyniki (metoda show()),
  • adres URL pobieranego elementu powstaje przez dodanie na końcu adresu sever.php?co= tekstu wprowadzonego w formularzu do elementu o identyfikatorze #sz,
  • instrukcja return false zakazuje przeładowania strony.

Wykorzystując odwołania kaskadowe, obsługę zdarzenia onsubmit można zakodować następująco:

 
 
JavaScript
Pobierz
$('#wyniki').load('server.php?co=' + $('#sz').attr('value')).show();

Podana wyszukiwarka, podobnie jak opisane wcześniej menu, działa także po wyłączeniu obsługi JavaScript.

27 sierpnia 2008

Powiązane publikacje

Jak działa AJAX?

Jak działa AJAX?

AjaXplorer

AjaXplorer

jQuery - od czego zacząć

jQuery - od czego zacząć

AJAX Kurs od podstaw - wymiana fragmentu strony

AJAX Kurs od podstaw - wymiana fragmentu strony

 
AJAX Kurs od podstaw - wyszukiwarka

AJAX Kurs od podstaw - wyszukiwarka

AJAX Kurs od podstaw - interaktywne aplikacje WWW

AJAX Kurs od podstaw - interaktywne aplikacje WWW

 
Skomentuj
ten artykuł

Komentarzy: 6

Kod obrazkowy
(Kliknij, aby zmienić)
 
Przejdż do tego postu na forum Saturday, 24.04.2010 08:43Mex

@butterflydaniel
Klasy zaczynaj od liter a nice cyfer

Przejdż do tego postu na forum Saturday, 9.01.2010 19:18ms

a gdzie tu AJAX?

Przejdż do tego postu na forum Tuesday, 25.08.2009 11:34friv

Mała sugestia dotycząca tego menu ajaxowego:
zamiast przygotowywać 4 pliki:
1. abba.html
2. fragment-abba.html
3. ac_dc.html
4. fragment-ac_dc.html
a podczas ładowania treści dołączać do adresu słowo fragment:
3. $('#content').load(
4. 'fragment-' + $(this).attr('href')
5. );
wystarczy mieć 2 strony(abba.html, ac_dc.html), w których żądana treść będzie w odpowiednim znaczniku (np. div z jakimś id, np. "tresc").
Wtedy w funkcji load można podać jaki znacznik ma być odczytany(nie trzeba ładować całej strony, można fragmenty):
3. $('#content').load(
4. $(this).attr('href')+" div#tresc"
5. );

Przejdż do tego postu na forum Friday, 23.01.2009 00:26butterflydaniel

Swietny tutorialik, po przeczytaniu od razu zabralem sie za pisanie kodu, lecz natknelem sie na dosc ciekawy problem i nie mam pojecia dlaczego to tak dziala, a wlasciwie nie dziala

mamy plik d.html

<html>
<head>
<title>Przykład 1-1</title>
<script type="text/javascript" src="./JQ.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#111 .b').click(function(){
$('#111').load('z.html');
});
$('#222 .c').click(function(){
alert('cos tam');
});
});
</script>
</head>
<body>
<p id="111">
<a class="b">klasa b</a>
</p>
<p id="222">
<a class="c">klasa c</a>
</p>
</body>
</html>

oraz plik z.html

<p id="222"><a class="c">klasa c</a></p>

Dlaczego po wczytaniu z.html do <p id="1111"> , wpisany tag nie jest obslugiwany przez jQuery?

W pliku glownym jest identyczny tag jak z pliku z.html i jest on caly czas obslugiwany przez jQuery.

Przejdż do tego postu na forum Thursday, 28.08.2008 09:55gajdaw

CYTAT(jj @ 27.08.2008)
Nie wiedziałem jak się skontaktować, dlatego piszę tutaj... Panie Włodzimierzu, informuję że od kilku tygodni na gajdaw.pl nie działają css-y i obrazki... URL-e z kodu strony zwracają Access Forbidden + 404.

Serdecznie pozdrawiam i dziękuję za pańskie świetne artykuły.



Serdeczne dzięki za info.
W związku z ogromnym transferem jaki generowała witryna gajdaw.pl podjąłem różne działania zapobiegawcze.

W celu ochrony pasma m.in. blokuję żądania z niewypełnionym polem referer.
(Kilku wesołych allegrowiczów wstawiało sobie różne moje obrazki do aukcji :-))

Chętnie porozmawiam o szczegółach problemów.
Może coś wspólnie wymyślimy?

Proszę o list na gajdaw@kul.lublin.pl

pzdr,
gajdaw

Przejdż do tego postu na forum Wednesday, 27.08.2008 00:54jj

Nie wiedziałem jak się skontaktować, dlatego piszę tutaj... Panie Włodzimierzu, informuję że od kilku tygodni na gajdaw.pl nie działają css-y i obrazki... URL-e z kodu strony zwracają Access Forbidden + 404.

Serdecznie pozdrawiam i dziękuję za pańskie świetne artykuły.

Zobacz wszystkie komentarze »

Autor

Włodzimierz Gajda

Artykuły tego autora:

Załączniki

Newsletter

Jesli chcesz być na bieżąco z tym co się dzieje na stronie magazynu INTERNET Maker zapisz się do naszego newslettera.