Jquery Ajax beforeSend and success,error & complete Jquery Ajax beforeSend and success,error & complete javascript javascript

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