Jquery Ajax beforeSend and success,error & complete
Maybe you can try the following :
var i = 0;function AjaxSendForm(url, placeholder, form, append) {var data = $(form).serialize();append = (append === undefined ? false : true); // whatever, it will evaluate to true or false only$.ajax({ type: 'POST', url: url, data: data, beforeSend: function() { // setting a timeout $(placeholder).addClass('loading'); i++; }, success: function(data) { if (append) { $(placeholder).append(data); } else { $(placeholder).html(data); } }, error: function(xhr) { // if error occured alert("Error occured.please try again"); $(placeholder).append(xhr.statusText + xhr.responseText); $(placeholder).removeClass('loading'); }, complete: function() { i--; if (i <= 0) { $(placeholder).removeClass('loading'); } }, dataType: 'html'});}
This way, if the beforeSend
statement is called before the complete
statement i
will be greater than 0 so it will not remove the class. Then only the last call will be able to remove it.
I cannot test it, let me know if it works or not.
It's actually much easier with jQuery's promise API:
$.ajax( type: "GET", url: requestURL, ).then((success) => console.dir(success) ).failure((failureResponse) => console.dir(failureResponse) )
Alternatively, you can pass in of bind
functions to each result callback; the order of parameters is: (success, failure)
. So long as you specify a function with at least 1 parameter, you get access to the response. So, for example, if you wanted to check the response text, you could simply do:
$.ajax( type: "GET", url: @get("url") + "logout", beforeSend: (xhr) -> xhr.setRequestHeader("token", currentToken) ).failure((response) -> console.log "Request was unauthorized" if response.status is 401