How can I display loading icon or spin while my during ajax call. below is my code
swal({
title: "Confirm your transaction",
html:true,
showSpinner: true,
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "Send",
closeOnConfirm: false
},function () {
$.ajax({
type: "post",
url: remoteUrl,
data: largeParams,
success: function (data) { }
}).done(function (data) {
swal("Thank you for your order", data, "success");
}).error(function (data) {
swal("Oops", "We couldn't connect to the server!", "error");
});
});
Answers will be appreciated.
This has worked best for me.
Previously, this was the case:
Rather than opening another sweet alert change the content within the sweet alert, otherwise there will be an ugly flash when the sweet alert is trying to change.
Thankfully this issue has been resolved in version 9.8.2.
Now that the previous issue has been resolved, we can open new sweet alert modals in our ajax call without that ugly flash.
You can also put a setTimeout
around the swal.fire()
to prevent an ugly transition between modals like so:
// this way when the ajax call completes quickly, the loader will still be shown for a bit
setTimeout(function() {
swal.fire({
icon: 'success',
html: '<h5>Success!</h5>'
});
}, 500);
// the loader html
var sweet_loader = '<div class="sweet_loader"><svg viewBox="0 0 140 140" width="140" height="140"><g class="outline"><path d="m 70 28 a 1 1 0 0 0 0 84 a 1 1 0 0 0 0 -84" stroke="rgba(0,0,0,0.1)" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round"></path></g><g class="circle"><path d="m 70 28 a 1 1 0 0 0 0 84 a 1 1 0 0 0 0 -84" stroke="#71BBFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-dashoffset="200" stroke-dasharray="300"></path></g></svg></div>';
$.ajax({
type: 'POST',
url: myurl,
data: str,
// here
beforeSend: function() {
swal.fire({
html: '<h5>Loading...</h5>',
showConfirmButton: false,
onRender: function() {
// there will only ever be one sweet alert open.
$('.swal2-content').prepend(sweet_loader);
}
});
},
success: function(json) {
try {
json = JSON.parse(json);
}
catch(error) {
swal.fire({
icon: 'error',
html: '<h5>Error!</h5>'
});
return false;
}
if(json.success) {
swal.fire({
icon: 'success',
html: '<h5>Success!</h5>'
});
} else {
swal.fire({
icon: 'error',
html: '<h5>Error!</h5>'
});
}
},
error: function() {
swal.fire({
icon: 'error',
html: '<h5>Error!</h5>'
});
return false;
}
});
Check out this codepen for an example.
Apparently you can also use the following to show real time progress, but I have not tested it.
xhr: function() {
var xhr = $.ajaxSettings.xhr();
xhr.upload.onprogress = function(e) {
// progressive loader
};
return xhr;
},
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With