AJAX w jQuery dla początkujących
Szybki i lekki kurs dla początkujących pod tytułem: AJAX w jQuery. Innymi słowy, jak przy pomocy tej biblioteki załadować dynamiczną treść bez przeładowania strony.
Wszystko czego będziemy potrzebować to biblioteka jQuery, dobre chęci oraz szczypta zapału. Przechodzimy na stronę jquery.com i pobieramy najnowszą wersję skryptu.
Ja na potrzeby tego wpisu stworzyłem sobie dwa pliki, pierwszy będący główną stroną która będzie korzystać z techniki AJAX, oraz drugą zawierającą ładowane treści – obie jako skrypty PHP, aby nie było zbyt nudno. Ok, przechodzimy do działania.
Pierwszym krokiem będzie dołączenie do dokumenty biblioteki jQuery w sekcji head strony:
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
Najprostszy przypadek
Czyli zwyczajne załadowanie zawartości innego pliku html/php bez przeładowania strony.
Dodam do naszej strony dwie warstwy, jedną która będzie przyjmować ładowane treści, i drugą z przyciskiem wywołującym zdarzenie.
<div id="box"></div> <div><input id="btn" type="button" value="Wyślij"></div>
Teraz pozostaje nam już tylko dodanie akcji do przycisku.
$(document).ready(function(){
$('#btn').click(function(){
$('#box').load('data.php');
});
});
Może czas na wyjaśnienie powyższego kodu. Pierwsza linia przypisuje zdarzeniu załadowania strony funkcję w której określamy co ma się dziać. Jest to wymagane podczas używania jQuery (i nie tylko), aby mieć pewność że struktura dokumentu widziana przez przeglądarkę jest kompletna. Kolejno elementowi o identyfikatorze btn przypisujemy zdarzenie kliknięcia w którym do elementu box ładujemy przy pomocy funkcji .load dane z pliku data.php.
W data.php umieściłem zwyczajowy tekst, równie dobrze może to być plik html. Przy tak przygotowanym kodzie, kliknięcie przycisku „Wyślij” powinno skutkować pojawieniem się nad nim treści zawartej w zewnętrznym pliku.
Kompletny kod całego dokumentu wygląda następująco:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#btn').click(function(){
$('#box').load('data.php');
});
});
</script>
</head>
<body>
<div id="box"></div>
<div><input id="btn" type="button" value="Wyślij"></div>
</body>
</html>
Przekazywanie parametrów
Jeśli powyższy przypadek chcielibyśmy wzbogacić o przekazanie jakichś parametrów do wywoływanego pliku data.php, musimy rozbudować nieco funkcję .load.
$('#box').load('data.php', {index: 4, str: 'abc'});
Drugi parametr określa tablicę par klucz: wartość. Dane te są przesyłane metodą POST, zatem mamy do nich łatwy dostęp w docelowym skrypcie php. Przykładowa zawartość data.php:
Index: <?php echo $_POST['index']; ?><br> Ciąg znaków: <?php echo $_POST['str']; ?>
Tym sposobem możemy wpływać na to co ma zostać załadowane. Podawane dane możemy odczytać z pola tekstowe lub innych zmiennych – wszystko zależy od naszej inwencji oraz umiejętności pisania w JavaScript.
Wysyłanie formularzy
Ostatnim punktem będzie wysłanie formularza. Można by oczywiście skorzystać z powyższej metody kopiując zawartości pól formy, jednak było by to mało wygodne. My skorzystamy z funkcji .serializeArray.
Zmodyfikowałem zawartość dokumentu wzbogacając go o prosty formularz z dwoma polami:
<div id="box"></div>
<div>
<form id="form">
Pole 1: <input type="text" name="pole1"><br>
Pole 2: <input type="text" name="pole2"><br>
<input id="btn" type="button" value="Wyślij">
</form>
</div>
Kolejno modyfikujemy kod JavaScript:
$('#box').load('data.php', $('#form').serializeArray());
Tym sposobem, do pliku data.php zostanie przekazana zawartość pól formularza o identyfikatorze form. Co z nimi zrobimy, zależy już od nas.
Podsumowanie
Mam nadzieję iż chociaż troszkę pomogłem osobą które po raz pierwszy próbowały użyć technologii AJAX przy pomocy jQuery. Bardziej zaawansowanym polecam zapoznanie się z resztą funkcji dostępnych w jQuery, które dają większe możliwości manipulacji danymi i tym co się dzieje podczas wywołania asynchronicznego.
Ostatni raz cokolwiek kodowałem w zeszłe wakacje i już prawie wszystko pozapominałem. Dzięki za odświeżenie pamięci.
A jak załadować automatycznie dane z pliku bez klikania w przycisk, i w odstępie czasu
np.co 1 minutę