I have reviewed a lot of answers to this type of question and now I am confused as to the best way. Given the latest jquery, I am wanting to
- Call an ajax function
- do ajax processing (success or error) // works fine
- on success or error return the status to the calling function for further processing
in the calling function (doAjax), how do I wait for a callback then complete the processing for success or error (in this case its on success clear a form, on error keep it as is)
Thx for any advice,
Art [EDIT] There was a typo as you guys spotted, call should have been doAnAjax not doAjax
$(function () {
doAnAjax(Url, data, function (myRtn) {
if (myRtn == "success") {
resetForm($('#myForm'));
resetForm($('form[name=addChlGrp]'));
} else {
$('.rtnMsg').html("Opps! Ajax Error");
}
});
});
function doAnAjax(newUrl, data) {
$.ajax({
url: newUrl,
async: true,
dataType: 'html',
beforeSend: function () {
$('.rtnMsg').html("<img src=_cssStyleImg_-A-loading.gif>");
},
type: "GET",
data: data,
cache: false,
success: function (data, textStatus, xhr) {
$('.rtnMsg').html(data);
myRtnA = "Success"
return myRtnA;
},
error: function (xhr, textStatus, errorThrown) {
$('.rtnMsg').html("opps: " + textStatus + " : " + errorThrown);
myRtnA = "Error"
return myRtnA;
}
});
}
The answer is you don't, but it is easily achievable. The idea of AJAX is it is asynchronous, hence the A JAX. This means that the function that originally calls your ajax will not wait for it to complete and instead all work to be completed after an ajax call should be in the success or error handlers.
If you need something to be synchronous you can change your flag from
async:true
toasync:false
but then it becomes really a SJAX call (not even sure the term exists but, technically it isnt an AJAX call anymore).You've got to use a callback function. Try this below:
As previously mentioned, using Callbacks.
You can then pass any function to
process
and it will be called on success/error.Check out 'derferred' in jquery. The below example uses deferred.done with async turned off, and seems to work for me.!