Czy w wywołaniach jQuery AJAX istnieje odpowiednik języka Java? Mam tutaj ten kod. W moim zawsze I wyjątek, jednak zawsze chcę to pójść do następnie () metody.
call.xmlHttpReq = $.ajax({
url : url,
dataType : 'json',
type : 'GET'
}).always(function(processedDataOrXHRWrapper, textStatus, xhrWrapperOrErrorThrown) {
throw "something";
}).then(function() {
alert("i want to always run no matter what");
});
Próbowałem użyć done () , complete () , a inny always () , ale wydaje się, że nic nie działa.
Oto JSFiddle:
javascript
jquery
ajax
promise
Oliver Watkins
źródło
źródło
always
try-catch-finally
oświadczeniu.throw "something";
po prostu zatrzyma wykonywanie kodu.Odpowiedzi:
Zobacz ten przykład:
$.ajax({ type: "GET", dataType: dataType, contentType: contentType, async: TRUE, url: $('html form:nth-child(1)').attr('action') + "?" $('html form:nth-child(1)').serialize(), success: function(data) { console.log("FUNFOU!"); }, error: function(data) { console.log("NÃO FUNFOU!"); }, complete: function(data) { console.log("SEMPRE FUNFA!"); //A function to be called when the request finishes // (after success and error callbacks are executed). } });
źródło
.complete()
został wycofany; użyj.always()
teraz. api.jquery.com/jQuery.ajax.always()
powinno działać. Zobacz sekcję Obiekt jqXHR pod adresem http://api.jquery.com/jQuery.ajax/ .Zobacz także http://api.jquery.com/deferred.always/
źródło
Poniższe sugestie nie będą działać w jQuery, ponieważ implementacja obietnicy jQuery nie obsługuje błędów zgłaszanych w przekazanych do niej metodach. Zostawiam je tutaj tylko jako ilustrację tego, co mogłoby być możliwe, gdyby jQuery było obietnice / zgodne z A +. Jak słusznie zauważa Bergi, będziesz musiał ręcznie zawijać swój kod we własnym bloku try catch.
call.xmlHttpReq = $.ajax({ url : url, dataType : 'json', type : 'GET' }).then(function(processedDataOrXHRWrapper, textStatus, xhrWrapperOrErrorThrown) { throw "something"; }).always(function() { alert("i want to always run no matter what"); });
Chociaż nie jestem pewien, czy obietnica jquery zawsze obsługuje, alternatywą byłoby użycie następnie (ponownie) i przekazanie tej samej funkcji, co zarówno successHandler, jak i errorHandler, na przykład:
call.xmlHttpReq = $.ajax({ url : url, dataType : 'json', type : 'GET' }).then(function(processedDataOrXHRWrapper, textStatus, xhrWrapperOrErrorThrown) { throw "something"; }).then(function() { alert("i want to always run no matter what"); }, function() { alert("i want to always run no matter what"); });
źródło
then
nie przechwytuje błędów w wywołaniu zwrotnym. Czy pan spróbować?Tylko uwaga dla tych, którzy używają jQuery 3.0 i nowszych
Jak w oficjalnej dokumentacji
źródło
Występuje błąd ajax jest zależny od serwera, najlepiej sprawdzić stan z "zakończony" jest najlepszy, rodzaj "sukcesu", "błędu" a inne nie są w 100% PUT, POST i GET ... zobacz na przykład
$.ajax({ url: '/api/v2/tickets/123456.json', .... .... .... complete: function(data) { if (data.statusText == "success") { console.log("Sent successfully"); } else { console.log("Not Sent"); } } });
Przepraszam, zły angielski! Dopingować ;-)
źródło
jeśli chcesz mieć jedną definicję kodu dla wszystkich żądań Ajax, możesz to zrobić w ten sposób
$(document).ajaxComplete(function () { console.log('ajax complete on doc'); })
źródło