Wygląda na to, że sukces, błąd i kompletne wywołania zwrotne są uruchamiane tylko wtedy, gdy żądanie ajax jest w stanie uzyskać odpowiedź z serwera.Sprawdź status żądania ajax jQuery
Jeśli więc wyłączyłem serwer, następujące wywołanie zwrotne błędu nie zostanie wykonane, a żądanie nie powiedzie się po cichu.
$.ajax({
type: "GET",
url: "http://localhost:3000/",
dataType: "script",
success: function() {
alert("success");
},
error: function() {
alert("error");
}
});
Jaki jest najlepszy sposób na zgłoszenie błędu, gdy w ogóle nie można uzyskać dostępu do serwera.
Edycja - Z tego, co wypróbowałem i przeczytałem, wynika, że wbudowana obsługa błędów jQuery nie działa z JSONP, ani dataType: "script". Więc spróbuję ustawić ręczny limit czasu.
Edycja - Czy trochę więcej badań i wygląda nie tylko nie działa callback błędu ajax, ale nie można przerwać żądania ajax ze skryptu dataType lub jsonp, a te żądania ignorują ustawienie limitu czasu.
Istnieje alternatywa - wtyczka jquery-jsonp, ale używa ukrytych elementów iframe, których wolałbym uniknąć. Tak więc postanowiłem stworzyć ręczny limit czasu, jak sugerowano poniżej. Nie można przerwać żądania, jeśli upłynie limit czasu, co oznacza, że skrypt może się załadować nawet po przekroczeniu limitu czasu, ale co najmniej coś zostanie uruchomione, jeśli serwer jest niedostępny.
jQuery ajax ma wbudowaną obsługę błędów (zobacz moją odpowiedź poniżej) możesz użyć ajaxsetup, aby zastosować te opcje. – Sphvn