Gibt es ein Java-Endlich-Analogon in jQuery AJAX-Aufrufen? Ich habe diesen Code hier. In meinem Fall löse ich immer eine Ausnahme, aber ich möchte IMMER, dass sie zur then () -Methode wechselt.
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");
});
Ich habe versucht, done () , complete () und das andere always () zu verwenden , aber nichts scheint zu funktionieren.
Hier ist JSFiddle:
javascript
jquery
ajax
promise
Oliver Watkins
quelle
quelle
always
...try-catch-finally
Erklärung einwickeln .throw "something";
wird die Codeausführung einfach gestoppt.Antworten:
Siehe dieses Beispiel:
$.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). } });
quelle
.complete()
wurde veraltet; verwenden.always()
jetzt. api.jquery.com/jQuery.ajax.always()
sollte arbeiten. Weitere Informationen finden Sie im Abschnitt Das jqXHR-Objekt unter http://api.jquery.com/jQuery.ajax/ .Siehe auch http://api.jquery.com/deferred.always/
quelle
Die folgenden Vorschläge funktionieren in jQuery nicht, da die Versprechenimplementierung von jQuery keine Fehler in den bis dahin übergebenen Methoden behandelt. Ich lasse sie hier nur als Beispiel dafür, was möglich sein könnte, wenn jQuery Versprechen / A + -konform wäre. Wie Bergi zu Recht betont, müssen Sie Ihren Code manuell in Ihren eigenen Try-Catch-Block einbinden.
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"); });
Obwohl ich nicht sicher bin, ob das Versprechen von jquery immer unterstützt, besteht eine Alternative darin, dann (erneut) dieselbe Funktion wie successHandler und errorHandler zu verwenden und Folgendes zu übergeben:
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"); });
quelle
then
fängt keine Fehler im Rückruf ab. Hast du das versucht?Nur ein Hinweis für diejenigen, die jQuery 3.0 und höher verwenden
Wie in der offiziellen Dokumentation
quelle
Es gibt einen Fehler, den Ajax vom Server abhängig macht. Der Status muss mit "vollständig" überprüft werden. Dies ist die beste, eine Art "Erfolg", "Fehler" und andere machen nicht 100% des PUT-, POST- und GET-Looks aus an einem Beispiel
$.ajax({ url: '/api/v2/tickets/123456.json', .... .... .... complete: function(data) { if (data.statusText == "success") { console.log("Sent successfully"); } else { console.log("Not Sent"); } } });
Sorry schlechtes Englisch! Prost ;-)
quelle
Wenn Sie eine Codedefinition für alle Ajax-Anforderungen wünschen, können Sie dies folgendermaßen tun
$(document).ajaxComplete(function () { console.log('ajax complete on doc'); })
quelle