Ponawianie połączenia
AdvancedAJAX posiada również mechanizmy odpowiedzialne za ponawianie połączenia w przypadku wystąpienia błędu. Dodanie tego jest niezwykle proste. Podczas przekazywania parametrów AdvancedAJAX należy utworzyć wartość dla pola retry, które określa liczbę prób ponownego połączenia. Możliwe, aczkolwiek opcjonalne, jest podanie wartości dla pola retryDelay, które określa liczbę milisekund pomiędzy próbami połączenia. Domyślną dla tego pola wartością jest 1000, czyli 1 sekunda. W przypadku wystąpienia błędu, przed próbą ponownego połączenia wywoływana jest metoda OnRetry, którą również możemy zmodyfikować. Przed zatrzymaniem działania skryptu na liczbę milisekund określoną w parametrze retryDelay wykonywana jest metoda onRetryDelay. Należy jednak pamiętać, że ponawianie połączenia następuje wyłączenie podczas przekroczonego czasu łączenia poprzedniej próby, a nie w przypadku wystąpienia przykładowo błędu 404 Not Found. Maksymalny czas łączenia definiujemy za pomocą parametru timeout, który winien zawierać liczbę milisekund. Po przekroczeniu czasu łączenia wywoływana jest metoda onTimeout, oczywiście przed onRetry.
advAJAX.get({
url: "http://www.example.com/page.html",
timeout : 3000,
onTimeout : function() {
alert("Connection timed out.");
},
retry: 2,
retryDelay: 2000,
onRetry : function() {
alert("Retry connection...");
},
onRetryDelay : function() {
alert("Awaiting retry...");
},
onSuccess : function(obj) {
alert(obj.responseText);
},
onError : function(obj) {
alert("Error: " + obj.status);
}
});
Wykonanie powyższego kodu spowoduje ponownienie próby połączenia dwukrotnie (czyli w sumie skrypt będzie się łączyć maksymalnie trzy razy) w przypadku wystąpienia błędu. Odstępy pomiędzy próbami wynosić będą dwie sekundy, a pomiędzy połączeniami wykonane zostaną, w kolejności, metody onRetryDelay oraz onRetry. Maksymalny czas łączenia został tutaj ustawiony na trzy sekundy, a w przypadku jego przekroczenia, przed ponowną próbą, zostanie wywołana metoda onTimeout. Aby sprawdzić, czy wystąpiło przedawnienie łączenia bez wykorzystania onTimeout, wystarczy odwołać się do zmiennej .aborted, która w tym wypadku będzie miała wartość true.