$.ajax - status - obsługa statusów odpowiedzi
Jedną z nowych metod obsługi żądań jest definiowanie specjalnych funkcji dla różnych kodów/statusów odpowiedzi od serwera - przykładowo dla 200, 404 i 503.$.ajax({ ... statusCode: { 200: function(data) { alert('OK'); }, 404: function(error) { alert('Błąd'); } } });
$.ajax - headers - obsługa wysyłanych nagłówków
Nowa właściwość headers pozwala definiować zestaw nagłówków wysyłanych do serwera. Podajemy parametr jako obiekt złożony z pary - klucza i wartości;$.ajax({ ... headers: { 'X-EXTRA-SSL':1 } });
$.ajax - obsługa parsowania przychodzących wiadomości
Nowe API do AJAXu wprowadza możliwość pełnej obsługi żądania - poczynając od filtrowania i odpowiedniego przygotowania wysyłanych parametrów poprzez ich parsowanie po odebraniu żądania aż do zdefiniowania własnych parametrów odpowiedzi (po ich uprzednim przeanalizowaniu).- prefilters - służą do filtrowania i ostatecznego definiowania parametrów żądania; wpis na stronie jQuery zawiera bardzo trafne przykłady zastosowania:
- sprawdzanie czy takie samo wywołanie jest obecnie przetwarzane i w takim wypadku jest ono anulowane, a wywoływane jest nowe
var currentRequests = {}; $.ajaxPrefilter(function( options, originalOptions, jqXHR ) { if ( options.abortOnRetry ) { if ( currentRequests[ options.url ] ) { currentRequests[ options.url ].abort(); } currentRequests[ options.url ] = jqXHR; } });
- zmiana adresu url żądania w przypadku, gdy kieruje poza aktualną domenę (przykładowo na adres proxy)
$.ajaxPrefilter( function( options ) { if ( options.crossDomain ) { options.url = "http://mydomain.net/proxy/" + encodeURIComponent( options.url ); options.crossDomain = false; } });
- sprawdzanie czy takie samo wywołanie jest obecnie przetwarzane i w takim wypadku jest ono anulowane, a wywoływane jest nowe
- converters - czyli funkcje, które parsują odpowiedź. Istnieje możliwość przypisania konwertera do poszczególnego typu odpowiedzi (dataType); jednocześnie wprowadzono możliwość definiowania własnych typów - które są obsługiwane przez własne, zdefiniowane konwertery
$.ajaxSetup({ converters: { "mydatatype": function( textValue ) { if ( valid( textValue ) ) { // Some parsing logic here return mydatatypeValue; } else { // This will notify a parsererror for current request throw exceptionObject; } } } });
- transports - obiekty służące do przygotowywania odpowiedzi - najczęściej dla własnych typów odpowiedzi; wśród nich możemy definiować własne typy danych (predefiniowane to 'text', 'json', 'xml' itd.) - jednocześnie przygotowując odpowiedni obiekt do przesłania dalej - tym razem dołączony przykład przedstawia ściąganie obrazka - kod dostępny w artykule na jquery.com
Deferred Object
Kolejną zmianą jest zmiana wartości zwracanej przez metodę $.ajax na obiekt o nazwie jqXHR czyli tzw. Deferred Object. Pozwala on na obsługę żądania zarówno w trakcie jego wykonywania (oczekiwania na odpowiedź) jak i już po. W tym celu możemy wykorzystać kilka metod:- fail - w parametrze podajemy funkcję, która będzie obsługiwać żądanie zakończone błędem
$.get("gate.php").fail( function(){ alert("błąd"); } );
- done - w parametrze podajemy funkcję, która będzie obsługiwać żądanie zakończone sukcesem
$.get("gate.php").done( function(){ alert("sukces"); } );
- then - w parametrze podajemy dwie funkcje - pierwsza do sukcesu, druga do błędu
$.get("gate.php").then( function(){ alert("sukces"); }, function(){ alert("błąd"); } );
W celu sprawdzenia aktualnego statusu żądania możemy użyć funkcji:
- isResolved - zwraca true w momencie, kiedy została wywołana funkcja resolve (czyli w momencie sukcesu lub wcześniej bezpośrednio przez program)
- isRejected - zwraca true w momencie, kiedy została wywołana funkcja reject (czyli w momencie błędu lub wcześniej bezpośrednio)
Jeżeli chcemy przedwcześnie nadać status żądaniom możemy to zrobić używając funkcji:
- resolve lub resolveWith - sukces; w celu wywołania funkcji done
- reject lub rejectWith - błąd; w celu wywołania funkcji fail
Brak komentarzy:
Prześlij komentarz