Is there any analog to a 'finally' in jQuery AJAX calls?
See this example:
$.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). } });
For more informations: http://api.jquery.com/jquery.ajax/
.always()
should work. See the The jqXHR Object section at http://api.jquery.com/jQuery.ajax/.
jqXHR.always(function(data|jqXHR, textStatus, jqXHR|errorThrown) { }); An alternative construct to the complete callback option, the .always() method replaces the deprecated .complete() method.
In response to a successful request, the function's arguments are the same as those of .done(): data, textStatus, and the jqXHR object. For failed requests the arguments are the same as those of .fail(): the jqXHR object, textStatus, and errorThrown. Refer to deferred.always() for implementation details.
The below suggestions will not work in jQuery, because jQuery's promise implementation does not handle errors thrown in methods passed to then. I am only leaving them here as an illustration of what could be possible if jQuery was promises/A+ compliant. As Bergi rightly points out, you will have to manually wrap your code in your own try catch block.
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");});
Although I'm not sure if jquery's promise supports always, an alternative would be to use then (again) and pass the same function as both successHandler and errorHandler, like this :
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");});