I\'m confused about using the async: false option with $.ajax(). According to the $.ajax() documentation:
As of jQuery 1.8, the use of async: false w
The Deferred object in jQuery handles promises in AJAX. As it is, async: false
would completely break the notion of asynchronous calls for which you need to handle promises.
What the jQuery doc snippet is telling you is that something like this would be prohibited.
$.ajax({
async: false,
/*rest of the options*/
}).done(function(){
//do something after the response comes back successfully
});
However, attaching callback options is completely valid, and is the only way of using AJAX with async: false
.
$.ajax({
async: false,
/*Rest of the options*/
success: function(){
console.log("foo");
}
});
You trying to use JSONP techinque with async:false at the same time. This is not possible. JSONP is actually creating a script
element and appending it somewhere to the document, so it's not an XHR and jQuery can't pass the sync flag anywhere. Since you get data from the same origin, just change dataType to
dataType: 'json',
However, everyone can tell you that synchronous requests are not good they hang your browser. You should use them only in a small number of cases.
what it is saying is, if your request is async: false
then you should not use ajax.done()
, ajax.fail()
etc methods to register the callback methods, instead you need to pass the callback methods using success/error/complete
options to the ajax call
correct
$.ajax({
async: false,
success: function(){
},
error: function(){
},
complete: function(){
}
})
wrong
$.ajax({
async: false
}).done(function(){
}).fail(function(){
}).always(function(){
})
if async: true //not specified
correct
$.ajax({
}).done(function(){
}).fail(function(){
}).always(function(){
})
or
$.ajax({
async: false,
success: function(){
},
error: function(){
},
complete: function(){
}
})