By default, $.ajax (and anything that uses it, such as $.post ), performs asynchronous requests. You can make the request synchronous by specifying async:false (see documentation ). However, I do not recommend using synchronous AJAX requests, as this reduces performance and leads to poor user experience. Instead, consider using a callback that is called in your success handler when the result is complete.
Here are two arbitrary and simple examples where we have an anchor that we want the text to be replaced with the result of the AJAX call when clicked. Both do the same, but the second is preferable because it keeps the browser responsive.
Synchronous:
function invokeAjaxSync() { var text; $.ajax({url: '/path/to/resource', async:false, success: function(result) { text = result.toString(); }});
Asynchronous (better):
function invokeAjaxAsync(callback) { $.ajax({url:'/path/to/resource', success: function(result) { callback(result); }}); } $('a.example').click(function() { var $this = $(this); invokeAjaxAsync(function(result) { $this.text(result.toString()); });
source share