Ajax
Terminem Ajax nazwano mechanizm przesyłania danych z serwera na stronę internetową, bez przeładowywania (wczytywania na nowo) całej tej strony.
Zobaczmy to na prosty przykładzie:
<html>
<head>
<meta charset="utf-8" />
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$(document).ready(function () {
$('#przycisk').click(function () {
jQuery.ajax({
url: 'example.txt',
type: 'get',
success: function(dane){
$('#dane').append(dane);
},
error: function(xhr, status, error) {
alert('Bład');
}
});
});
});
</script>
</head>
<body>
<div id="dane"></div>
<button id="przycisk">kliknij</button>
</body>
</html>
Tak jak w poprzednich przykładach, mamy tu zdefiniowanie obsługi wydarzenia "onClick". W skrypcie wykorzystano funkcję ajax z biblioteki jQuery. Parametrem tej funkcji jest struktura (obiekt) o polach:
- url - adres pobierania (tu z pliku example.txt umieszczonym w tym samym miejscu na serwerze, co tworzona strona;
- type - sposób pobierania danych (get/post)
- success - finkcja wywoływana po pobraniu danych (parametrem są te dane)
- error - funkcja wywoływana w razie błedu
W funkcji "success" dodaje się wczytany tekst do sekcji div o identyfikatorze dane.
W tym przykładzie należy zwrócić uwagę na zrównoleglenie danych. Zapytanie jest wysyłane do serwera (funkcją ajax), natomiast funkcja success (;ub error) zostaje wywołana dopiero po zakończeniu transmisji. W międzyczasie strona / skrypt może wykonywać inne działania (równolegle do transmisji).
Funkcja takie jak error / success nazywamy funkcjami powrotu (callback functions).
Otrzymane dane mogą być w formacie Json - wtedy trzeba je przed użyciem przetworzyć. W jQuery istnieje funkcja specjalizowana do komunikacji Json: $.getJSON .
Przykład:
- Tworzymy plik Json z danymi:
{
"items": [
{
"key": "Pierwszy",
"value": 1
},
{
"key": "Drugi",
"value": 2
}
],
"title": "Dane testowe."
}
- Wczytujemy ten plik:
<html>
<head>
<meta charset="utf-8" />
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$(document).ready(function () {
$('#przycisk').click(function () {
$.getJSON('example.json', function (data) {
$('#tytul').append(data.title);
var items = data.items.map(
function (item) {
return item.key + ': ' + item.value+'<br />';
}
);
if (items.length) {
$('#lista')
.empty()
.html('<li>' + items.join('</li><li>') + '</li>');
}
});
});
});
</script>
</head>
<body>
<h1 id="tytul"></h1>
<ul id="lista"></ul>
<button id="przycisk">kliknij</button>
</body>
</html>
1) Zauważ, że funkcja powrotu (callback) jest drugim parametrem funkcja getJSON. Zwracane dane nie są tekstem, ale strukturą!!!
2) Listę do wyświetlenia przygotowuje metoda map (https://developer.mozilla.org/pl/docs/Web/JavaScript/Referencje/Obiekty/Array/map ), która przekszałca listę parametrów (z Json) na listę wartości wyliczonych na podstawie tych parametrów przez podaną funkcję. Tutaj funkcja tworzy napis klucz: wartość
;
3). Funkcja join (https://developer.mozilla.org/pl/docs/Web/JavaScript/Referencje/Obiekty/Array/join) łączy tablicę (listę) elementów w jeden napis (łańcuch znaków)
4). Zapis zaczynający się od $('#lista')
króconą formą (często stosowaną) instrukcji:
if (items.length) {
lista=$('#lista');
lista.empty();
lista.html('<li>' + items.join('</li><li>') + '</li>');
}
Taki skrót jest możliwy dzięki temu, że każda kolejna funkcja zwraca obiekt jQuery, który może być dalej przetwarzany.