niedziela, 7 czerwca 2015

[AJAX] Praca z AJAX-em w jQuery

TRUE
172202579730833435
Biblioteka jQuery posiada pełen zestaw metod służących do kompletnej pracy z żądaniami ajaxowymi. Umożliwia wysyłanie i odbieranie żądań zarówno GET jak i POST, automatyzując przy tym bardzo wiele procesów. Korzystanie z AJAX-a w jQuery jest proste i przyjemne - całość sprowadza się do poznania wszystkich metod, jakie dla AJAX-a ten framework oferuje. Metod tych jest dość dużo i poznamy je tutaj za chwilę wraz z odpowiednimi przykładami ich zastosowania. Artykuł nie jest przeznaczony dla początkujących w jQuery, więc aby go w pełni zrozumieć wymagana jest znajomość choćby podstaw frameworka. Ogólny wstęp do mechanizmów AJAX-owych wraz z opisem obiektu XMLHttpRequest znajduje się w poprzednim artykule, który przeczytać można tutaj.

Wczytanie danych do selektora - $.load()

Obsługa AJAX-a za pomocą jQuery jest o tyle łatwiejsza, że jQuery zamyka wszystko w pojedyńczych metodach, które wywołuje się szybciej, aniżeli podczas pisania dłuższego kodu dla obiektu XMLHttpRequest. JQuery ponadto bierze na siebie całą obsługę, w związku z czym programista nie musi się martwić o implementację w wiekowych wersjach przeglądarek. Przyjrzyjmy się małemu porównaniu. Chcąc wczytać AJAX-em za pomocą zwykłego Javascriptu plik ajax.txt do DIV-a o nazwie response, zrobimy to tak:

  1. <div id="response"></div>
  2.  
  3. <script>
  4.  
  5. var xmlhttp = new XMLHttpRequest();
  6.  
  7. xmlhttp.onreadystatechange = function()
  8.  
  9. {
  10.  
  11.   if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
  12.  
  13.   {
  14.  
  15.      document.getElementById("response").innerHTML = xmlhttp.responseText;
  16.  
  17.   }
  18.  
  19. };
  20.  
  21. xmlhttp.open("GET", "ajax.txt", true);
  22.  
  23. xmlhttp.send();
  24.  
  25. </script>
  26.  

Za pomocą jQuery natomiast zamkniemy powyższe w jednej linijce kodu:

  1. <div id="response"></div>
  2.  
  3. <script>$("#response").load("ajax.txt");</script>





Metoda load() z biblioteki jQuery przyjmuje 3 parametry:

  1. $(selektor).load(url, data, callback);

gdzie:

  • url - adres, z którym chcemy się połączyć
  • data - [opcjonalnie] dodatkowe parametry w żadaniu, np.:


  1. {
  2.  
  3.   zmienna1 = "wartość1",
  4.  
  5.   zmienna2 = "wartość2"
  6.  
  7. }
  8.  


  • callback - [opcjonalnie] funkcja zwrotna, która zostanie wywołana po wykonaniu metody load()

Wczytanie danych z określonego selektora

Ciekawą możliwością metody load() jest wczytanie danych z określonego selektora.
Przykładowo - poprzednio wczytany został plik ajax.txt, którego zawartość wyglądała tak:

  1. Hello World!

Zmieniając teraz zawartość pliku ajax.txt na następującą:

  1. Hello <p>World!</p>

A metodę load() wykonując w następujący sposób:

  1. $("#response").load("ajax.txt p");

Otrzymamy:



Jak widzimy, z pliku ajax.txt wczytana zostaje jedynie zawartość selektora p.
Oczywiście zamiast ogólnego selektora p, podać możemy #identyfikator lub klasę CSS:

  1. $("#response").load("ajax.txt #div");
  2.  
  3. $("#response").load("ajax.txt .klasa");
  4.  

Możemy równiez tworzyć zagnieżdżone konstrukcje:

  1. $("#response").load("ajax.txt #div p");


Funkcja callback dla metody load()
Jako opcjonalny argument dla load() podać możemy funkcję typu callback. Funkcja ta wykona się zawsze po zakończeniu działania metody load().
Funkcja zwrotna przyjmuje 3 parametry:

  • responseTxt - zwróconą za pomocą AJAX-a zawartość
  • statusTxt - informację o statusie żądania, możliwe wartości:
    success
    notmodified
    error
    timeout
    parsererror
  • xhr - zawiera obiekt XMLHttpRequest wykorzystany do wygenerowania żądania


Przykład użycia, który wyświetli nam w DIV-ie o id callback wszystkie dane pobrane przez funkcję zwrotną:

  1. <div id="response"></div>
  2.  
  3. <div id="callback"></div>
  4.  
  5. <input id="button" type="button" value="load" />
  6.  
  7.  
  8.  
  9. <script>
  10.  
  11. $(document).ready(function() {
  12.  
  13.   $("#button").click(function() {
  14.  
  15.     $("#response").load("ajax.txt", function(responseText, statusTxt, xhr) {
  16.  
  17.       $("#callback").html(
  18.  
  19.       "<i>responseText:</i> " + responseText + "<hr />" +
  20.  
  21.       "<i>statusTxt:</i> " + statusTxt + "<hr />" +
  22.  
  23.       "<i>xhr:</i> " + xhr + "<hr />" +
  24.  
  25.       "<i>xhr.readyState:</i> " + xhr.readyState + "<hr />" +
  26.  
  27.       "<i>xhr.status:</i> " + xhr.status);    
  28.  
  29.     });
  30.  
  31.   });
  32.  
  33. });
  34.  
  35. </script>
  36.  


Wynik:


Żądanie metodą GET - $.get()

O ile metoda load() służy do szybkiego wczytania danej zawartości do określonego elementu jak np. DIV, tak w praktyce wykorzystuje się ją rzadko, a dane przesyła za pomocą metod $.get() i $.post().
Uwaga: dane przesyłane metodą GET mogą być cache'owane przez przeglądarkę, co za tym idzie - czasem po zmianie treści pliku z jakim się łączymy w cache'u może znajdować się wciąż poprzednia wersja pliku.
Metoda $.get() wysyła i odbiera dane z serwera za pomocą żądania HTTP GET, a jej użycie wygląda następująco:

  1. $.get(url, data, callback(data, status, xhr), dataType);

gdzie:

  • url - adres, z którym chcemy się połączyć
  • data - [opcjonalnie] dodatkowe parametry w żadaniu, np.:


  1. {
  2.  
  3.   zmienna1 = "wartość1",
  4.  
  5.   zmienna2 = "wartość2"
  6.  
  7. }
  8.  


  • callback - [opcjonalnie] funkcja zwrotna, która zostanie wywołana po wykonaniu metody $.get()
  • dataType - [opcjonalnie] określa typ danych jakich oczekuje się w odpowiedzi od serwera


Skrócone użycie metody $.get() wyglądać może najprościej tak:

  1. $.get(url, callback)


Funkcja callback przyjmuje tutaj 3 parametry:

  • data - zwrócona przez serwer zawartosc
  • status - informacja o statusie żądania, możliwe wartości:
    success
    notmodified
    error
    timeout
    parsererror  
  • xhr - obiekt XMLHttpRequest użyty w żądaniu


Przykład użycia metody $.get():

  1. <div id="response"></div>
  2.  
  3. <div id="callback"></div>
  4.  
  5. <input id="button" type="button" value="load" />
  6.  
  7.  
  8.  
  9. <script>
  10.  
  11. $(document).ready(function() {
  12.  
  13.   $("#button").click(function() {
  14.  
  15.       $.get("ajax.txt", function(data, status) {
  16.  
  17.         $("#response").html("<i>data:</i> " + data);
  18.  
  19.         $("#callback").html("<i>status:</i> " + status);    
  20.  
  21.       });
  22.  
  23.   });
  24.  
  25. });
  26.  
  27. </script>
  28.  

Wynik :



Jeśli nie podamy parametru dataType to jQuery automatycznie zgaduje jakich danych oczekujemy.
Jeśli jednak chcemy podać ten parametr ręcznie, to poniżej lista wartości jakie można dla dataType podać:

  • xml - dokument XML
  • html - HTML jako plain text
  • text - plain text
  • script - Wykonuje treść odpowiedzi jako kod Javascript, zwraca rezultat jako plain text
  • json - Odbiera żądanie jako JSON, zwracając obiekt Javascriptu

Żądanie metodą POST - $.post()

Wysłanie żądania metodą POST przydaje się podczas przesyłania większych ilości danych i danych z formularzy. Dodatkową funkcjonalnością jest fakt, iż dane przesyłane za pomocą POST nie są cache'owane, tak jak w przypadku GET.
Użycie metody $.post() wygląda następująco:

  1. $.post(url, data, callback(data, status, xhr), dataType);

gdzie:

  • url - adres, z którym chcemy się połączyć
  • data - [opcjonalnie] dodatkowe parametry w żadaniu, np.:


  1. {
  2.  
  3.   zmienna1 = "wartość1",
  4.  
  5.   zmienna2 = "wartość2"
  6.  
  7. }
  8.  


  • callback - [opcjonalnie] funkcja zwrotna, która zostanie wywołana się po wykonaniu metody $.post()
  • dataType - [opcjonalnie] określa typ danych jakich oczekuje się w odpowiedzi od serwera


Przykład użycia:

  1. <div id="response"></div>
  2.  
  3. <div id="callback"></div>
  4.  
  5. <input id="button" type="button" value="load" />
  6.  
  7.  
  8.  
  9. <script>
  10.  
  11. $(document).ready(function() {
  12.  
  13.   $("#button").click(function() {
  14.  
  15.       $.post("ajax.php",
  16.  
  17.       {
  18.  
  19.         imie = "Jan",
  20.  
  21.         nazwisko = "Kowalski"
  22.  
  23.       },
  24.  
  25.       function(data, status) {
  26.  
  27.         $("#response").html("<i>data:</i> " + data);
  28.  
  29.         $("#callback").html("<i>status:</i> " + status);    
  30.  
  31.       });
  32.  
  33.   });
  34.  
  35. });
  36.  
  37. </script>
  38.  

W powyższym przykładzie zmienne imie i nazwisko zostaną przesłane do pliku ajax.php metodą POST i dostępne po jego stronie jako $_POST['imie'] i $_POST['nazwisko']

Niestandardowe żądanie - $.ajax()

Oba powyższe rodzaje żądań, czyli $.get() i $.post() są tak naprawdę wykonywane za pomocą metody $.ajax(). Czasem jednak zachodzi potrzeba przygotowania niestandardowego żądania, do którego nie wystarczą nam predefiniowane metody $.get() i $.post(). W przypadku wystąpienia takiej konieczności możemy użyć metody $.ajax z własną listą parametrów.
Użycie metody $.ajax() wygląda następująco:

  1. $.ajax({parametr1:wartość1, parametr2:wartość2, ... })


Lista możliwych do określenia parametrów:

  • async - true lub false, określa czy żądanie ma wykonać się asynchronicznie, domyślnie: true
  • beforeSend(xhr) - funkcja, która wykona się tóż przed wysłaniem żądania do serwera
  • cache - true lub false, określa, czy przeglądarka może cache'ować odpowiedzi z serwera, domyślnie: true
  • complete(xhr, status) - funkcja, która wykona się po pełnym wykonaniu żądania
  • contentType - nagłówek określający rodzaj wysyłanych do serwera danych. Domyślnie: application/x-www-form-urlencoded
  • context - określa zmienną this dla funkcji callback
  • data - określa dane jakie mają być wysłane do serwera
  • dataFilter(data, type) - funkcja operująca na nieprzetworzonej (surowej) odpowiedzi od serwera uzyskanej z obiektu XMLHttpRequest
  • dataType - określa typ oczekiwanych w odpowiedzi danych
  • error(xhr, status, error) - funkcja, która wykona się po wystąpieniu błędu
  • global - true lub false, określa czy używać globalnych zdarzeń dla żądań AJAX-a. Domyślnie: true
  • ifModifiedtrue lub false, określa, czy status success ma być ustawiany jedynie podczas różnicy w otrzymanych od ostatniego żądania danych. Domyślnie: false
  • jsonp - nadpisuje funkcję callback dla żądania JSONP
  • jsonpCallback - funkcja callback dla żądania JSONP
  • password - definiuje hasło używane podczas łączenia z użyciem uwierzytelniania przez HTTP
  • processData - true lub false, określa, czy dane przesyłane w żądaniu mają być dołączane do adresu, domyślnie: true
  • scriptCharset - określa kodowanie znaków dla żądania
  • success(result, status, xhr) - funkcja wywoływana podczas przetworzenia żądania zakończonego sukcesem
  • timeout - określa timeout - w milisekundach dla żądania
  • traditional - true lub false, określa, czy używać standardowej serializacji parametrów
  • type - określa metodę wykonania żądania - GET lub POST
  • url - określa adres do pliku, do którego wysyłamy żądanie
  • username - definiuje nazwę użytkownika używaną podczas łączenia z użyciem uwierzytelniania przez HTTP
  • xhr - funkcja używana podczas tworzenia obiektu XMLHttpRequest

Przykład użycia metody $.ajax może wyglądać następująco:

  1. <div id="response"></div>
  2.  
  3. <input id="button" type="button" value="load" />
  4.  
  5.  
  6.  
  7. <script>
  8.  
  9. $(document).ready(function() {
  10.  
  11.   $("#button").click(function() {  
  12.  
  13.       $.ajax({url: "ajax.txt", async: true, type: "GET", success: function(data){
  14.  
  15.           $("#response").html("<i>data:</i> " + data);
  16.  
  17.       }});
  18.  
  19.   });
  20.  
  21. });
  22.  
  23. </script>
  24.  


Wynik:


Wartości domyślne - $.ajaxSetup

Warto wiedzieć, że dla wszystkich wyżej wymienionych parametrów możemy ustawić wartości domyślne, które będą używane dla wszystkich wykonywanych żądań.
Służy do tego metoda:

  1. $.ajaxSetup({parametr1:wartość1, parametr2:wartość2, ... })

Użycie zatem identyczne jak przy metodzie $.ajax().

Funkcje wykonywane dla określonych stanów - Complete, Error, Send, Start, Stop, Success

W jQuery istnieje możliwość zdefiniowania własnych funkcji, które będą wywoływane podczas określonego stanu związanego z żądaniem.
Możemy np. określić tutaj animację, która będzie wyświetlana podczas ładowania żądania, lub komunikaty o stanie żądania.

Metoda ajaxComplete()

Za jej pomocą definiujemy własną funkcję, która wykona się w momencie zakończenia przetwarzania żądania.

  1. $(document).ajaxComplete(function(event,xhr,options))

gdzie:

  • event- przechowuje obiekt zdarzenia
  • xhr - przechowuje obiekt XMlHttpRequest użyty w żądaniu
  • options - przechowuje wartości parametrów użytych w żądaniu

Przykład użycia:

  1. <div id = "status"></div>
  2.  
  3. <script>
  4.  
  5. $(document).ajaxComplete(function() {
  6.  
  7.     $("#status").html("Wykonywanie żądania zostało zakończone!");
  8.  
  9. });
  10.  
  11. </script>
  12.  

Metoda ajaxError()

Za jej pomocą definiujemy własną funkcję, która wykona się w momencie wystąpienia błędu.

  1. $(document).ajaxError(function(event,xhr,options, exception))

gdzie:

  • event- przechowuje obiekt zdarzenia
  • xhr - przechowuje obiekt XMlHttpRequest użyty w żądaniu
  • options - przechowuje wartości parametrów użytych w żądaniu
  • exception - przechowuje wyjątek, który wyrzucił Javascript

Przykład użycia:

  1. <div id = "status"></div>
  2.  
  3. <script>
  4.  
  5. $(document).ajaxError(function() {
  6.  
  7.     $("#status").html("Wystapił błąd!");
  8.  
  9. });
  10.  
  11. </script>
  12.  

Metoda ajaxSend()

Za jej pomocą definiujemy własną funkcję, która wykona się tóż przed wysłaniem żądania.

  1. $(document).ajaxSend(function(event, xhr, options))

gdzie:

  • event- przechowuje obiekt zdarzenia
  • xhr - przechowuje obiekt XMlHttpRequest użyty w żądaniu
  • options - przechowuje wartości parametrów użytych w żądaniu

Przykład użycia:

  1. <div id = "status"></div>
  2.  
  3. <script>
  4.  
  5. $(document).ajaxSend(function(event, xhr, options) {
  6.  
  7.     $("#status").html("Właśnie wysyłam żądanie do: " + options.url);
  8.  
  9. });
  10.  
  11. </script>
  12.  

Metoda ajaxStart()

Za jej pomocą definiujemy własną funkcję, która wykona się podczas rozpoczęcia przetwarzania żądania.

  1. $(document).ajaxStart(function())

Przykład użycia:

  1. <div id = "status"></div>
  2.  
  3. <script>
  4.  
  5. $(document).ajaxStart(function() {
  6.  
  7.     $("#status").html("Ładowanie...czekaj...");
  8.  
  9. });
  10.  
  11. </script>
  12.  

Metoda ajaxStop()

Za jej pomocą definiujemy własną funkcję, która wykona się po zakończeniu wykonania WSZYSTKICH żądań.

  1. $(document).ajaxStop(function())

Przykład użycia:

  1. <div id = "status"></div>
  2.  
  3. <script>
  4.  
  5. $(document).ajaxStop(function() {
  6.  
  7.     $("#status").html("Wszystkie żądania zostały wykonane!");
  8.  
  9. });
  10.  
  11. </script>
  12.  

Metoda ajaxSuccess()

Za jej pomocą definiujemy własną funkcję, która wykona się po zakończeniu przetwarzania żądania zakończonego sukcesem.

  1. $(document).ajaxSuccess(function())

Przykład użycia:

  1. <div id = "status"></div>
  2.  
  3. <script>
  4.  
  5. $(document).ajaxSuccess(function() {
  6.  
  7.     $("#status").html("Żądanie wykonane z sukcesem!");
  8.  
  9. });
  10.  
  11. </script>
  12.  

Serializacja parametrów w żądaniu - $.param()

Jeśli chcemy przesłać w adresie żądania np. obiekt Javascripu lub tablicę, musimy taki typ zserializować.
Dopiero po serializacji możemy dołączyć go do adresu URL.
Przykład użycia:

  1. <div id="result"></div>
  2.  
  3.  
  4.  
  5. <script>
  6.  
  7. $(document).ready(function() {
  8.  
  9.   bookObj = new Object();
  10.  
  11.   bookObj.title = "Hobbit";
  12.  
  13.   bookObj.author = "Tolkien";
  14.  
  15.   var book_serialized = $.param(bookObj);
  16.  
  17.   var url = "ajax.php?" + book_serialized;
  18.  
  19.   $("#result").text(url); //Wynik: ajax.php?title=Hobbit&author=Tolkien
  20.  
  21. });
  22.  
  23. </script>
  24.  

Serializacja formularza - $.serialize()

Jeśli chcemy przesłać dane z formularza, to musimy dokonać serializacji jego pól (np. wartości wszystkich inputów, textarea itd.) Służy do tego metoda $.serialize(). Tworzy ona zserializowany ciąg tekstowy zawierający wartości pól formularza.
Jako selektor możemy podać cały formularz, lub tylko określone pole/pola.

Przykład użycia:

  1. <form action="">
  2.  
  3.   Book Title: <input type="text" name="title" value="Hobbit"><br>
  4.  
  5.   Book Author: <input type="text" name="author" value="Tolkien"><br>
  6.  
  7. </form>
  8.  
  9. <input id="button" type="button" value="serialize" />
  10.  
  11. <div id="result"></div>
  12.  
  13.  
  14.  
  15. <script>
  16.  
  17. $(document).ready(function() {
  18.  
  19.   $("#button").click(function() {
  20.  
  21.     var form_serialized = $("form").serialize();
  22.  
  23.     $("#result").text(form_serialized);
  24.  
  25.    });
  26.  
  27. });
  28.  
  29. </script>
  30.  


Wynik:


Serializacja formularza do tablicy - $.serializeArray()

Za pomocą jQuery możemy zserializować formularz (lub określone jego pola) do postaci tablicy.
Służy do tego metoda $.serializeArray(). Tworzy ona zserializowaną tablicę zawierającą wartości pól formularza. Do wartości takich odwołujemy się poprzez: pole.name i pole.value.

Przykład użycia:

  1. <form action="">
  2.  
  3.   Book Title: <input type="text" name="title" value="Hobbit"><br>
  4.  
  5.   Book Author: <input type="text" name="author" value="Tolkien"><br>
  6.  
  7. </form>
  8.  
  9. <input id="button" type="button" value="serializeArray" />
  10.  
  11. <div id="result"></div>
  12.  
  13.  
  14.  
  15. <script>
  16.  
  17. $(document).ready(function() {
  18.  
  19.   $("#button").click(function() {
  20.  
  21.     var form_to_array = $("form").serializeArray();
  22.  
  23.     $.each(form_to_array, function(i, pole){
  24.  
  25.         $("#result").append(pole.name + ": " + pole.value + " ");
  26.  
  27.     });      
  28.  
  29.    });
  30.  
  31. });
  32.  
  33. </script>
  34.  


Wynik:


Pobieranie danych JSON - $.getJSON()

Do pobierania przez AJAX danych zwracanych w formacie JSON służy metoda $.getJSON().
Ogromnym atutem jest fakt, iż dane pobierane za pomocą tej metody lądują bezpośrednio w javascriptowym obiekcie.
Użycie metody $.getJSON() wygląda następująco:

  1. $(selektor).getJSON(url, data, success(data, status, xhr))

gdzie:

  • url - adres, z którym chcemy się połączyć
  • data - [opcjonalnie] dodatkowe parametry w żadaniu, np.:


  1. {
  2.  
  3.   zmienna1 = "wartość1",
  4.  
  5.   zmienna2 = "wartość2"
  6.  
  7. }
  8.  


  • success - [opcjonalnie] funkcja zwrotna, która zostanie wywołana po prawidłowym przetworzeniu JSON-a.

Pozostałe stany obsłużyć możemy następująco (łącząc je łańcuchowo):

  1. $.getJSON("ajax.json", function() {
  2.  
  3.   alert("success");
  4.  
  5. })
  6.  
  7. .done(function() { alert("done!"); })
  8.  
  9. .success(function() { alert("success!"); })
  10.  
  11. .error(function() { alert("error!"); })
  12.  
  13. .fail(function() { alert("fail!"); })
  14.  
  15. .complete(function() { alert("complete!"); });
  16.  


plik ajax.json:

  1. {
  2.  
  3.   "books": [
  4.  
  5.  
  6.  
  7.     { "title" : "Hobbit", "author" : "Tolkien" },
  8.  
  9.     { "title" : "Potop", "author" : "Sienkiewicz" },
  10.  
  11.     { "title" : "Solaris", "author" : "Lem" }
  12.  
  13.   ]
  14.  
  15. }
  16.  


Przykład użycia #1:

  1. <input id="button" type="button" value="loadJSON" />
  2.  
  3. <div id="result"></div>
  4.  
  5. <script>
  6.  
  7. $(document).ready(function() {
  8.  
  9.   $("#button").click(function() {  
  10.  
  11.       var i, c;    
  12.  
  13.       $.getJSON("ajax.json").done(function(json) {
  14.  
  15.         c = json.books.length;  
  16.  
  17.         for(i = 0; i < c; i++)
  18.  
  19.         {    
  20.  
  21.           $("#result").append(i + ") " + json.books[i].title + " <br />");
  22.  
  23.         }
  24.  
  25.       });
  26.  
  27.    });
  28.  
  29. });
  30.  
  31. </script>
  32.  


Wynik:



Przykład użycia #2:

  1. <input id="button" type="button" value="loadJSON" />
  2.  
  3. <div id="result"></div>
  4.  
  5. <script>
  6.  
  7. $(document).ready(function() {
  8.  
  9.   $("#button").click(function() {  
  10.  
  11.     $.getJSON("ajax.json", function(result) {          
  12.  
  13.         $.each(result, function(key, field){
  14.  
  15.           var i, c;
  16.  
  17.           $("#result").append("<b>" + key + ":</b> <br /> ");
  18.  
  19.           c = field.length;
  20.  
  21.           for(i = 0; i < c; i++)
  22.  
  23.           {
  24.  
  25.              $("#result").append(i + ") " + field[i].title + " | " + field[i].author + "<br /> ");
  26.  
  27.           }        
  28.  
  29.         });
  30.  
  31.     });
  32.  
  33.   });
  34.  
  35. });
  36.  
  37. </script>
  38.  


Wynik:


Pobieranie danych z Javascriptu - $.getScript()

Bardzo ciekawą metodą jest metoda $.getScript(). Pobiera ona w odpowiedzi kod Javascript, wykonuje go, a następnie zwraca jego wynik w postaci stringu.
Użycie metody wygląda tak:

  1. $(selektor).getScript(url, success(response, status))

gdzie:

  • url - adres do pliku .js, z którym chcemy się połączyć
  • success - [opcjonalnie] funkcja zwrotna, która zostanie wywołana po prawidłowym przetworzeniu JSON-a.

Argumenty funkcji zwrotnej success:

  • response - przechowuje odpowiedź zwróconą do żądania
  • status - informacja o statusie żądania, możliwe wartości:
    success
    notmodified
    error
    timeout
    parsererror  
Zobaczmy na przykładach:

plik ajax.js:

  1. var a, b, c;
  2.  
  3.  
  4.  
  5. a = 2;
  6.  
  7. b = 9;
  8.  
  9. c = a + b;
  10.  
  11.  
  12.  
  13. alert(a + "+" + b + "=" + c);
  14.  
  15.  
  16.  
  17. function testJS(a, b)
  18.  
  19. {
  20.  
  21.  var c = a + b;
  22.  
  23.  alert(a + "+" + b + "=" + c);
  24.  
  25. }
  26.  


Przykład #1:
plik z wywołaniem żądania AJAX

  1. <input id="button" type="button" value="loadJSON" />
  2.  
  3. <script>
  4.  
  5. $(document).ready(function() {
  6.  
  7.   $("#button").click(function() {    
  8.  
  9.     $.getScript("ajax.js");
  10.  
  11.   });
  12.  
  13. });
  14.  
  15. </script>
  16.  


Wynik:



Przykład #2:
plik z wywołaniem żądania AJAX

  1. <input id="button" type="button" value="loadJSON" />
  2.  
  3. <script>
  4.  
  5. $(document).ready(function() {
  6.  
  7.   $("#button").click(function() {    
  8.  
  9.     $.getScript("ajax.js", function() {    
  10.  
  11.       testJS(12, 7);
  12.  
  13.     });
  14.  
  15.   });
  16.  
  17. });
  18.  
  19. </script>
  20.  


Wynik:



Jak widać, wykonała się funkcja testJS() pobrana za pomocą AJAX-a z zewnętrznego pliku i dołączona do naszego dokumentu.

Podsumowanie

Przeanalizowaliśmy sobie tutaj większość metod jakich używa się podczas pracy z AJAX-em w jQuery. Jak widać na przykładach, jQuery automatyzuje nam wiele czynności, przez co kod staje się krótszy, niż podczas wykorzystywania "surowego" obiektu XMLHttpRequest. W następnych artykułach wykorzystamy zdobytą wiedzę w nieco bardziej praktycznych zastosowaniach.

1 komentarz:

  1. To moje pierwsze podejście do zrozumienia Ajaxa. Super czytelne przykłady, które zastępują tysiące słów. Dziękuję.

    OdpowiedzUsuń

Masz sugestię? Znalazłeś błąd? Napisz komentarz! :)

webmaester.pl - profesjonalne projektowanie WWW i webaplikacji
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji