jQuery - Ajax
Przed poniższą lekturą warto byś przypomniał sobie dział o asynchroniczności i ajaxie. Sporo rzeczy tutaj będzie się powtarzać.
$.ajax()
Funkcja $.ajax(), bo o niej mowa to główna, a zarazem najbardziej rozbudowana funkcja z tutaj omawianych. Ma ona postać:
$.ajax({
url: "http://localhost:5000/movies", //gdzie się łączymy
method: "post", //typ połączenia, domyślnie get
dataType: "json", //typ danych jakich oczekujemy w odpowiedzi
contentType: "application/json", //typ wysyłanych danych
data: { //dane do wysyłki
title: "Przykładowy tytuł",
author: "Karol Nowak",
}
})
.done(res => { //reaguję na odpowiedź - o tym poniżej
console.log(res);
});W praktyce parametrów możliwych do ustawienia jest ciut więcej.
To co ci powyżej pokazałem, to raczej bardziej rozbudowana wersja tej funkcji. W wielu sytuacjach nie będziesz musiał podawać wszystkich parametrów. Chociażby proste pobranie danych wymaga od nas podania tylko adresu url.
$.ajax({
url: "https://jsonplaceholder.typicode.com/posts"
})
.done(res => {
console.log(res);
});Warto przy okazji podać też właściwość dataType, która określa typ danych jakich oczekujemy w odpowiedzi. Jeżeli jej nie podamy, jQuery spróbuje ustalić typ zwróconych danych na podstawie zwróconego z serwera nagłówka "Content-Type" (co w większości sytuacji powinno być prawidłowe...).
Podczas wysyłania danych na serwer podajemy je jako obiekt przypisany pod właściwość data:
Domyślnie dane takie są dołączane jako query string dołączany do adresu na który się łączymy.
Jeżeli chcemy wysłać je w innym formacie, musimy dodatkowo ustawić właściwość Content-Type za pomocą właściwości contentType:
Funkcje zwrotne
Jeżeli chcemy zareagować na odpowiedź z serwera, możemy to zrobić na dwa sposoby.
Po pierwsze możemy użyć funkcji zwrotnych, które są dostępne dla nas w postaci dodatkowych parametrów:
Przykładowo:
Wraz z wersją 1.5 do jQuery wprowadzono obiekt $.Deferred, który jest bardziej rozbudowanym odpowiednikiem obietnic dla jQuery:
Dzięki niemu możemy reagować na asynchroniczne operacje za pomocą funkcji:
fail()
wywoływane gdy operacja asynchroniczna zakończy się negatywnie (reject)
always()
wywoływane po zakończeniu asynchronicznej operacji - bez względu na to czy zakończyła się błędem czy sukcesem
progress()
wywoływane w momencie, gdy obiekt deferred poinformuje o postępie za pomocą funkcji notify()
Zamiast powyższych funkcji możemy także skorzystać z odpowiedników metod then() i catch(). Działają ona bardzo podobnie jak w czystym Javascript. Różnicą w przypadku jquery jest to, że dla metody then() możemy przekazać dodatkową trzecią funkcję, która jest odpowiednikiem powyższej funkcji progress().
Najważniejszą dla nas sprawą jest to, że zarówno powyżej omawiana funkcja $.ajax(), jak i poniżej omawiane jej skrócone odpowiedniki zwracają nam taki obiekt, dzięki czemu możemy na ich zakończenie reagować za pomocą wcześniej omawianych właściwości success, complete i error, ale też powyżej omawianych funkcji.
Użycie takich funkcji może mieć więc postać:
Podobnie do obietnic z czystego Javascript drugi sposób o wiele lepiej sprawdzi się w przypadku pisania funkcji służących do wczytywania danych:
Skrócone odpowiedniki
JQuery udostępnia nam też kilka funkcji będących alternatywnymi, skróconymi wariantami użycia powyżej funkcji $.ajax(). Funkcje te to odpowiednio:
$.get()
$.post()
$.getJSON()
$.getScript()
$.get()
Funkcja $.get() służy do wykonywania połączeń typu get. Jest to odpowiednik wywołania funkcji $.ajax() w postaci:
Przykłady użycia:
$.post()
Funkcja $.post() służy do wykonywania połączeń typu post. Jest ona odpowiednikiem wywołania $.ajax() w postaci:
Przykłady użycia:
$.getJSON()
Funkcja $.getJSON() służy do pobierania danych w formacie JSON. Jest ona odpowiednikiem wywołania $.ajax() w postaci:
Przykłady użycia:
$.getScript()
Funkcja $.getScript() służy do pobierania skryptów Javascript. Jest równocześnie odpowiednikiem wywołania $.ajax() w postaci:
Przykłady użycia:
$element.load()
Funkcja $element.load() służy do wczytywania treści z serwera i umieszczenia jej w danym elemencie.
Jej przykładowe użycie może mieć postać:
Wiele połączeń
Bardzo często zdarza się sytuacja, że musimy pobrać dane z wielu miejsc. Przykładowo mamy użytkownika, który ma swoje dane, ale ma też zbiór filmów itp.
Dzięki obiektowi $.Deferred możemy korzystać z dodatkowej metody $.when(deferred), która odpalana jest w momencie, gdy wszystkie przekazane do niej obietnice zostaną wykonane.
Last updated