I have the following code.. But the spin effect doesn't happen until the ajax call is finished (which is pretty much useless)
$.ajax({
type:"GET",
async:false,
url: "../../xxxxx/AvailabilityServlet",
data: {action: "xxx", sku: sku},
beforeSend: function( xhr ) {
$("#submiticon").removeClass("fa-search");
$("#submiticon").addClass("fa-spinner fa-spin");
}
})
.done(function( data ) {
result = data
})
.fail(function( data ) {
result=null
})
.always(function( data ) {
$("#submiticon").addClass("fa-search");
$("#submiticon").removeClass("fa-spinner");
$("#submiticon").removeClass("fa-spin");
})
But if I add an alert, it throws the alert and then the spin effect starts showing up.
$.ajax({
type:"GET",
async:false,
url: "../../xxxxx/AvailabilityServlet",
data: {action: "xxx", sku: sku},
beforeSend: function( xhr ) {
$("#submiticon").removeClass("fa-search");
$("#submiticon").addClass("fa-spinner fa-spin");
alert("stop") ;
}
JSP:
<div class="col-md-4">
<form role="form" class="ng-pristine ng-valid">
<div class="input-group col-md-6" >
<input type="text" class="form-control" id="skuInput" placeholder="Sku" autocomplete="off" >
<span id="submit" class="input-group-addon"><span id="submiticon" class="fa fa-search"></span></span>
</div>
</form>
</div>
$("#submit").click(function(){
searchSku()
});
Remove
async:false
from your$.ajax
call. You are making it synchronous instead of asynchronous (the A in AJAX) and hanging the browser while it waits for a response.