How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request? How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request? ajax ajax

How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?


From the jQuery documentation: you specify the asynchronous option to be false to get a synchronous Ajax request. Then your callback can set some data before your mother function proceeds.

Here's what your code would look like if changed as suggested:

beforecreate: function (node, targetNode, type, to) {    jQuery.ajax({        url: 'http://example.com/catalog/create/' + targetNode.id + '?name=' + encode(to.inp[0].value),        success: function (result) {            if (result.isOk == false) alert(result.message);        },        async: false    });}


You can put the jQuery's Ajax setup in synchronous mode by calling

jQuery.ajaxSetup({async:false});

And then perform your Ajax calls using jQuery.get( ... );

Then just turning it on again once

jQuery.ajaxSetup({async:true});

I guess it works out the same thing as suggested by @Adam, but it might be helpful to someone that does want to reconfigure their jQuery.get() or jQuery.post() to the more elaborate jQuery.ajax() syntax.


Excellent solution! I noticed when I tried to implement it that if I returned a value in the success clause, it came back as undefined. I had to store it in a variable and return that variable. This is the method I came up with:

function getWhatever() {  // strUrl is whatever URL you need to call  var strUrl = "", strReturn = "";  jQuery.ajax({    url: strUrl,    success: function(html) {      strReturn = html;    },    async:false  });  return strReturn;}