¿Existe un análogo de Java 'finalmente' en las llamadas jQuery AJAX? Tengo este código aquí. En mi siempre arrojo una excepción, sin embargo SIEMPRE quiero que vaya al método then () .
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");
});
He intentado usar done () , complete () y el otro always () , pero nada parece funcionar.
Aquí está JSFiddle:
javascript
jquery
ajax
promise
Oliver Watkins
fuente
fuente
always
...try-catch-finally
declaración usted mismo.throw "something";
simplemente detendrá la ejecución del código.Respuestas:
Vea este ejemplo:
$.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). } });
fuente
.complete()
ha sido desaprobado; usar.always()
ahora. api.jquery.com/jQuery.ajax.always()
Deberia trabajar. Consulte la sección El objeto jqXHR en http://api.jquery.com/jQuery.ajax/ .Consulte también http://api.jquery.com/deferred.always/
fuente
Las siguientes sugerencias no funcionarán en jQuery, porque la implementación de la promesa de jQuery no maneja los errores lanzados en los métodos pasados a ese entonces. Solo los dejo aquí como una ilustración de lo que podría ser posible si jQuery cumpliera con promises / A +. Como bien señala Bergi, tendrá que ajustar manualmente su código en su propio bloque 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"); });
Aunque no estoy seguro de si la promesa de jquery es compatible siempre, una alternativa sería usar then (nuevamente) y pasar la misma función como successHandler y errorHandler, así:
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"); });
fuente
then
no detecta errores en la devolución de llamada. ¿Sabía usted intenta esto?Solo una nota para aquellos que usan jQuery 3.0 y posterior
Como en la documentación oficial
fuente
Hay un error ajax que depende del servidor, es necesario comprobar el estado con "completo" es el mejor, una especie de "éxito", "error" y otros no son 100% de los PUT, POST y GET ... mira en un ejemplo
$.ajax({ url: '/api/v2/tickets/123456.json', .... .... .... complete: function(data) { if (data.statusText == "success") { console.log("Sent successfully"); } else { console.log("Not Sent"); } } });
¡Lo siento mal inglés! Anímate ;-)
fuente
si desea una definición de código para todas las solicitudes ajax, puede hacerlo así
$(document).ajaxComplete(function () { console.log('ajax complete on doc'); })
fuente